REST 全稱是 Representational State Transfer,中文意思是“表述性狀態轉移”。RESTful 是關於 Web 的現有特徵和使用方式的一些準則和約束。 基於 Spring MVC 的 RestController,我們可以方便的構建一個 RESTful 風格的應用。
使用 Maven 建立專案
我們可以直接使用 IntelliJ IDEA (推薦)中的 Spring initializer 快速建立一個基於 Spring Boot 的專案,這裡使用 Maven 構建, 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-rest-service</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencies>
<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>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
複製程式碼
Spring Maven plugin
是 Spring 針對 Maven 開發的一套外掛,包含了幾個強大的功能:
- 無需過多複雜的配置即可快速構建一個可執行的 jar 包,使應用的執行可以幾乎不受環境的影響
- 自動搜尋
public static void main()
方法,並將其所在的類標誌為啟動類 - 對 Spring Boot 的依賴進行自動化管理,所有的依賴專案版本都和 Spring Boot 父專案保持一致(預設情況下),當然也可以手動指定其他版本
Spring 同樣支援 Gradle
構建,詳細配置請參考 Build with Gradle
建立實體類
這裡的實體類並非 ORM 中的實體類,而是 REST 中的 “資源” ,我們的 web service 要實現的功能是處理 URL 為 /userinfo/1
的 GET
請求,並將結果以 JSON 作為響應體返回,響應狀態碼為 200 OK
,JSON 的格式如下:
{
"id": 1,
"name": "張三"
}
複製程式碼
這個例子簡單模擬了獲取 id 為 1 的使用者資訊,首先要建立 POJO 類 User
:
public class User {
private final long id;
private final String name;
public User(long id, String name) {
this.id = id;
this.name = name;
}
public long getId() {
return id;
}
public String getName() {
return name;
}
}
複製程式碼
Spring 預設使用 `Jackson` 作為 JSON 解析庫將 POJO 類物件序列化為 JSON。
複製程式碼
建立 Controller
在 controller 類上新增 @RestController
註解即可實現將返回值序列化為 JSON 並充當響應體返回,返回的 content-type
為 application/json
,請求 /user/1
將得 id 為 1 的使用者的資訊,下面是 controller 類:
@RestController
public class GreetingController {
private static final String template = "張三";
private final long id = 1;
@RequestMapping("/user/{id}")
public User userInfo(@PathVariable("id")long id) {
return new User(id, template);
}
}
複製程式碼
讓應用跑起來
傳統的構建方式是生成一個 war 檔案然後部署到 web 伺服器上,這樣有時會覺得不太方便,因此推薦使用 Spring Boot 的 Maven 外掛快速生成一個獨立的可執行的 jar 檔案,使用 java -jar
命令即可啟動這個應用,所有的類和資源等檔案都被整合到這一個 jar 檔案中,裡面也包括了嵌入式的 servlet 容器(比如 Tomcat),下面是這個應用的啟動類:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
複製程式碼
@SpringBootApplication
這個註解是一個組合註解,它包括:
@Configuration
:宣告這個類是上下文中的 bean 的配置類@EnableAutoConfiguration
:使 Spring 將上下文中掃描到的相關 bean 配置類或 properties 類,並將這些 bean 放到應用上下文中- Spring 當檢測到 classpath 下有 spring-webmvc 的依賴後,會自動給應用啟動類上新增
@EnableWebMvc
的註解,它表示這個應用是一個 web 應用,應用啟動時就會執行和 web 相關的操作,比如例項化DispatcherServlet
類並進行相關的配置 @ComponentScan
:使 Spring 掃描所有自定義元件類、配置類、業務類以及控制器,並將其裝配
在啟動類中的 main
方法中呼叫 SpringBootApplication.run()
即可實現應用的啟動,和傳統 Java web 應用配置複雜的 web.xml 檔案截然不同,不需要在配置上花費太多時間
構建可執行的 jar
我們可以使用一條簡單的命令來完成應用打包成 jar:
$ ./mvnw clean package
複製程式碼
執行這條命令來啟動應用:
$ java -jar target/gs-rest-service-0.1.0.jar
複製程式碼
做一些簡單的測試
在瀏覽器中訪問 htpp://localhost:8080/user/1
,沒問題的話會得到如下響應:
{
"id": 1,
"name": "張三"
}
複製程式碼
總結
這僅僅是一個 RESTful web service,更多文件請瀏覽:Building a RESTful Web Service
個人部落格同步更新,獲取更多技術分享請關注:鄭保樂的部落格