PS:任何時候只要決定開始都不算晚。
Spring Boot 是用來簡化 Spring 應用程序的開發的,可以減少不必要的配置過程,其主要特性包括 Spring Boot Starter、自動配置、命令行接口、Actuator 等,作為 Android 開發者對 Spring Boot 的學習將以會使用為主,所有文章會基於對應的案例,本篇文章將從以下幾個方面介紹如何使用 Spring Boot 開發一個接口:
- Spring Boot 項目初始化
- 使用 IDEA 創建 Spring Boot 項目
- Spring Boot 項目目錄結構
- 簡述 POM 文件
- 實現一個簡單的接口
- 接口測試
Spring Boot 項目初始化#
創建 Spring 應用程序都是從 Spring Initializr 開始,可以快速的選擇項目的依賴項,可以訪問 https://start.spring.io/
來完成 Spring 應用程序的創建,如下圖所示:
通過配置可生成對應配置信息的項目源碼包,使用 IntelliJ IDEA 或其他 IDE 打開即可。
使用 IDEA 創建 Spring Boot 項目#
最常見的方式肯定是使用 IDE 來進行 Spring 相關項目的創建,這裡選擇 IntelliJ IDEA 來創建 Spring Boot 項目。
第一步:選擇 File->New->Project,如下:
第二步:選擇 Spring Initializr,Project SDK 至少為 JDK 1.8,然後選擇 Next:
第三步:根據項目配置項目信息,然後選擇 Next:
第四步:選擇 Web->Spring Web 以及 Spring Boot 的版本,這一步實際上就是為該項目添加了支持 Web 開發的依賴,之後會在 pom 文件中看到相關依賴,然後選擇 Next:
第五步:選擇 Finish 完成項目的創建:
Spring Boot 項目目錄結構#
Spring Boot 項目的主要目錄結構如下:
│ pom.xml
└─src
├─main
│ ├─java
│ │ └─com
│ │ └─manu
│ │ └─hello
│ │ SpringBootHelloWorldApplication.java
│ │
│ └─resources
│ │ application.properties
│ │
│ ├─static
│ └─templates
└─test
└─java
└─com
└─manu
└─hello
SpringBootHelloWorldApplicationTests.java
主要目錄與文件介紹如下:
- pom.xml:項目基於 mavan 的依賴配置文件,如果項目基於 gradle,則有對應的 gradle 文件;
- src/main/java:項目源代碼目錄;
- src/main/resources:資源文件目錄;
- src/test:測試文件目錄;
- application.properties:配置文件,也可以使用 yml 文件進行配置;
- static:靜態資源文件目錄,如 html、css、js 等;
- templates:模板文件目錄,如 Thymeleaf 等;
- SpringBootHelloWorldApplication:項目啟動類。
簡述 POM 文件#
POM 是項目對象模型(Project Object Model)的簡稱,maven 項目通過 xml 來進行項目配置,pom.xml 就是用來配置 maven 項目的,pom.xml 文件類似於 Android 開發中的 build.gradle 文件,當然 Spring Boot 項目也可以使用 gradle 來進行構建,主要用來管理項目依賴、配置項目信息等,來看一下 Spring Web 項目的 pom 文件內容:
<?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">
<!--pom模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!--繼承的父項目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<!--項目信息-->
<groupId>com.manu</groupId>
<artifactId>spring-boot-hello-world</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--項目產生的構件類型,默認jar,其他如war、rar、ejb、ear、par等-->
<packaging>jar</packaging>
<name>spring-boot-hello-world</name>
<description>Spring Boot sample for Hello World!</description>
<!--屬性設置-->
<properties>
<java.version>1.8</java.version>
</properties>
<!--依賴-->
<dependencies>
<!--支持Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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>
至於 pom 文件的其他具體配置這裡不做細究。
實現一個簡單的接口#
根據上面步驟項目已經創建好了,項目啟動類如下:
@EnableAutoConfiguration
@ComponentScan
@Configuration
//@SpringBootApplication
public class SpringBootHelloWorldApplication {
public static void main(String[] args) {
// 啟動程序,包括Spring容器、內嵌的Tomcat等
SpringApplication.run(SpringBootHelloWorldApplication.class, args);
}
}
其中 @SpringBootApplication
相當於 @EnableAutoConfiguration
、@ComponentScan
和 @Configuration
一起使用,主要用來配置啟動類,這裡將在此基礎上實現一個接口,首先創建一個 MessageBean
作為返回的實體類,如下:
/**
* @Desc: MessageBean
* @Author: jzman
* @Date: 2020/3/6 15:51.
*/
public class MessageBean {
private long id;
private String author;
private String message;
public MessageBean(long id, String author, String info) {
this.id = id;
this.author = author;
this.message = info;
}
// ...
}
然後,創建對應的控制器類,其中註解 @RestController
將類 HelloWorldController
標記為一個控制器,該類裡面的方法的返回都將被轉換成對象而不是頁面視圖,等價於註解 @Controller
和 @ResponseBody
一起使用。
返回的 MessageBean
將會被轉換成 json
,這個過程由 Spring 的 HTTP 消息轉換器自動支持,最終使用 MappingJackson2HttpMessageConverter
將 MessageBean
對象轉換為對應的 json
格式
/**
* @Desc: HelloWorldController
* @Author: jzman
*/
//@Controller
//@ResponseBody
@RestController
public class HelloWorldController {
private final AtomicLong counter = new AtomicLong();
// @RequestMapping(value = "/message", method = RequestMethod.GET)
@GetMapping("/message")
public MessageBean message(@RequestParam(name = "author", defaultValue = "jzman") String author,
@RequestParam(name = "message", defaultValue = "Hello world!") String message) {
return new MessageBean(counter.incrementAndGet(), author, message);
}
}
@RestController
相當於 @Controller
和 @ResponseBody
一起使用的效果,就是將 Controller 中返回的對象轉換為對應的格式。
@Controller
負責的類的注入操作,這裡不進行深入,如果用過 Android 開發中的 Dagger 框架可有助於理解註解 @Controller
的使用,@ResponseBody
主要是標識將返回的對象轉換為特定的格式,默認是 json 格式。
@RequestMapping
用於地址映射,可在類上和方法上使用,如果在類上使用,該類中所有響應請求的方法都要以此為父路徑,如果在方法上使用則表示當前響應的路徑,如上代碼中實現一個 GET 請求可以使用 @RequestMapping
,也可以使用 @GetMapping
, @GetMapping
實際上默認指定了請求方法為 RequestMethod.GET
,此外 @RequestParam
用來配置請求參數。
接口測試#
運行 SpringBootHelloWorldApplication
,運行成功截圖如下:
訪問下面接口查看返回的數據:
http://localhost:8080/message?author=jzman&message=Hello
返回數據如下:
{"id":3,"author":"jzman","message":"Hello"}
至此,使用 Spring Boot 實現了一個簡單的接口,接口配置方式類似於 Android 開發中的 Retrofit,使用註解輕鬆完成相關配置。