本指南將指導您使用Spring建立 "Hello, World "RESTful Web服務的過程。java
你將創建一個服務,它將接受HTTP GET請求,地址是git
http://localhost:8080/greeting。
它將響應一個JSON表示的問候語,以下面的列表所示。github
{"id":1, "content": "Hello, World!"}
您能夠在查詢字符串中使用可選的名稱參數自定義問候語,以下列表所示。web
http://localhost:8080/greeting?name=User
name參數值會覆蓋World的默認值,並反映在響應中,以下列表所示。spring
{"id":1, "content": "Hello,User!"}
JDK 1.8或更高版本
Maven 3.2+apache
下載安裝Java
配置JAVA_HOME = JDK目錄瀏覽器
C:/Users/Administrator/.m2/settings.xml服務器
<settings> <mirrors> <mirror> <id>aliyun</id> <name>aliyun</name> <mirrorOf>central</mirrorOf> <!-- 國內推薦阿里雲的Maven鏡像 --> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror> </mirrors> </settings>
要跳過基本步驟,請執行如下操做。mvc
下載並解壓本指南的源碼庫,或者使用Git克隆:app
git clone https://github.com/spring-guides/gs-rest-service.git。 cd gs-rest-service/complete mvnw package java -jar target
而後打開瀏覽器,貼入以下地址:
http://localhost:8080/greeting。
它將響應一個JSON表示的問候語,以下面的列表所示。
{"id":1, "content": "Hello, World!"}
使用https://start.spring.io/ 生成一個zip文件,解壓後獲得一個目錄,其內是腳手架代碼
進入目錄,執行:
mvnw package
漫長的執行後,看到BUILD SUCCESS
java –jar target\<JARFILE>
對於全部的Spring應用,你應該從Spring Initializr開始。Initializr提供了一種快速的方法來引入應用程序所需的全部依賴關係,併爲您作了大量的設置。這個例子只須要Spring Web依賴關係。
您能夠直接從Spring Initializr中獲取包含必要依賴項的Maven構建文件。如下列表顯示了選擇Maven時建立的pom.xml文件。
對於全部的Spring應用,你應該從Spring Initializr開始。Initializr提供了一種快速的方法來引入應用程序所需的全部依賴關係,併爲您作了大量的設置。這個例子只須要Spring Web依賴關係。
<?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.4.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>rest-service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>rest-service</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>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>
如今你已經創建了項目和構建系統,你能夠建立你的Web服務。經過思考服務交互開始這個過程。
該服務將處理對/greeting的GET請求,在查詢字符串中可選擇使用名稱參數。GET請求應該返回一個200 OK的響應,在body中包含表明問候語的JSON。它應該相似於下面的輸出。
{ "id": 1, "content"。"Hello,world!" }
id字段是問候語的惟一標識符,內容是問候語的文本表示。
爲了對問候語的表示進行建模,建立一個資源表示類。爲此,提供一個Java對象,其中包含字段、構造函數以及id和內容數據的訪問器,以下列表所示(來自src/main/java/com/example/restservice/Greeting.java)。
package com.example.restservice; public class greeting { private final long id; private final String content.public Greeting(long id, String content.) public Greeting(long id, String content) { this.id = id.com this.content = content; } public long getId() { return id; } public String getContent() { return content; } }
該應用程序使用Jackson JSON庫自動將Greeting類型的實例聚集成JSON。web啓動程序默認包含Jackson。
在Spring構建RESTful Web服務的方法中,HTTP請求由一個控制器處理。這些組件由@RestController註解標識,下面列表中顯示的GreetingController(來自src/main/java/com/example/restservice/GreetingController.java)經過返回Greeting類的新實例來處理對/greeting的GET請求。
package com.example.restservice; import java.util.concurrent.atomic.AtomicLong; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class GreetingController { private static final String template = "Hello, %s!"; private final AtomicLong counter = new AtomicLong(); @GetMapping("/greeting") public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } }
這款控制器簡潔明瞭,但在引擎蓋下有不少東西。咱們一步步分解它。
也看看應用代碼:
package com.example.restservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class RestServiceApplication { public static void main(String[] args) { SpringApplication.run(RestServiceApplication.class, args); } }
@SpringBootApplication是一個方便的註解,它添加了如下全部內容。
main()方法使用Spring Boot的SpringApplication.run()方法來啓動應用程序。你注意到沒有一行XML嗎?也沒有web.xml文件。這個web應用程序是100%純Java的,你不須要處理任何管道或基礎設施的配置。
你能夠用Gradle或Maven從命令行運行應用程序。你也能夠構建一個可執行的JAR文件,其中包含全部必要的依賴關係、類和資源,而後運行它。構建一個可執行的jar,能夠很容易地在整個開發生命週期中,在不一樣的環境中,將服務做爲一個應用來發布、版本和部署,等等。
若是你使用Gradle,你能夠經過使用./gradlew bootRun來運行應用程序。或者,你能夠經過使用./gradlew build來構建JAR文件,而後運行JAR文件,以下所示。
java -jar build/libs/gs-rest-service-0.1.0.jar
若是你使用Maven,你可使用./mvnw spring-boot:run來運行應用程序。另外,你也能夠用./mvnw clean package構建JAR文件,而後運行JAR文件,以下所示。
java -jar target/gs-rest-service-0.1.0.jar
這裏描述的步驟能夠建立一個可運行的JAR。你也能夠創建一個經典的WAR文件。
日誌輸出會顯示。服務應該在幾秒鐘內啓動並運行。
如今服務已經開通,請訪問http://localhost:8080/greeting,在那裏你應該能夠看到。
{"id":1, "content": "你好,世界!"}
經過訪問http://localhost:8080/greeting?name=User,提供名稱查詢字符串參數。請注意content屬性的值是如何從Hello,World!變爲Hello,User!的,以下列表所示。
{"id":2, "content": "Hello, User!"}
這個變化代表GreetingController中的@RequestParam安排按照預期工做。名稱參數的默認值是World,但能夠經過查詢字符串明確地重寫。
還請注意id屬性如何從1變成了2,這證實你在多個請求中針對同一個GreetingController實例工做,而且每次調用時,它的計數器字段都按預期遞增。
恭喜你!你剛剛用Spring開發了一個RESTful Web服務。你剛剛用Spring開發了一個RESTful web服務。