Spring Boot可以说,是当前Java领域非常重要的一个框架,可以非常方便的进行Java Web应用的开发。官网提供的一套脚手架可以快速进行项目模板的创建,并引入依赖库。项目初始模板可以访问网站:https://start.spring.io 即可,具体如下所示:
此界面提供了多种配置参数,可以宣称依赖管理的工具是Maven还是Gradle,可以宣传开发的语言是Java\Kotlin还是Groovy。另外,可以配置项目的打包方式,是Jar还是War,并选择JDK的版本,这里选择JDK 8。右边可以添加合适的依赖库,这里添加Spring Web,MySQL和PostgreSQL的驱动库。参数确定后,单击【GENERATE】按钮生成项目模板代码包。
其次,可以将下载的项目模板代码包解压,并用IDEA打开项目,其中的pom.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
默认情况下,IDEA中的Maven仓库会指向官方的地址,这可能会导致有些Jar包下载的比较慢,或者说有时候会出现无法下载的情况。针对这种情况,建议是配置maven的本地仓库,并设置国内的镜像,比如华为的镜像或者阿里的镜像等。如果有些库还是没有,可以放在本地,并在pom.xml中进行引用。
在项目文件中,添加一个控制器文件,这个控制器controller包位于DemoApplication类的内部,这样SpringBoot可以自动进行类扫码,并加载,否则,可能需要单独进行配置,指定SpringBoot到哪里进行类扫描,不然会出现定义的controller api无法调用的情况。具体的项目结构如下图所示:
HomeController.java是一个典型的Java 后台代码,SpringBoot利用框架提供的注解,非常方便的进行Web服务的开发工作,大大简化了后台代码的开发难度,从而提高了开发效率。示例文件的代码如下:
package com.example.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class HomeController {
@RequestMapping("/login")
public String Login(@RequestParam("username") String username, @RequestParam("password") String password) {
if ("admin".equals(username) && "12345".equals(password)){
return "1";
}else {
return "0";
}
}
}
根据官方文档的说法,@RestController相当于@Controller和@ResponseBody的组合,返回JSON数据时,不需要在方法前加@ResponseBody,但用@RestController注解时,不能返回jsp,html页面。@RequestMapping代码请求时候的API路径映射,这个是唯一的,可以供前台AJAX进行调用。这里类上的@RequestMapping注解和方法上的@RequestMapping组合起来构成一个API的调用路径。@RequestParam("username") String username表示一个Request参数,参数名为username,类型是String,并赋值给变量username。这样前台调用的时候,参数名需要和后台参数名保持一致。
下面介绍一种将本地的IP地址映射到公网IP的方法,Localtunnel是一个可以让内网服务器暴露到公网上的开源项目,它可以通过NPM来全局安装:
npm install localtunnel -g
映射
lt --port 8080
它在每次开启映射外网的网址时,一般都是不同的。示例如图所示:
然后打开浏览器输入对应的公网网址即可,如果能按预期返回结果,那么说明web API逻辑基本正确:
这对于用鸿蒙OS编写测试代码,进行后台服务器通信来说,是非常重要的手段。由于使用远程模拟器,因此,本地开启的服务不能在远程模拟器上进行访问,因此无法测试访问Web API等测试用例。