摘要:構建服務本指南將引導你完成使用創建服務的過程。接下來,你將創建將為這些問候語提供服務的資源控制器。告訴在包中查找其他組件配置和服務,允許它找到控制器。顯示日志輸出,該服務應在幾秒內啟動并運行。
構建RESTful Web服務
本指南將引導你完成使用Spring創建“hello world” RESTful Web服務的過程。
將要構建什么你將構建一個接受HTTP GET請求的服務:
http://localhost:8080/greeting
并使用JSON響應表示問候語:
{"id":1,"content":"Hello, World!"}
你可以使用查詢字符串中的可選name參數自定義問候語:
http://localhost:8080/greeting?name=User
name參數值將覆蓋默認值“World”并反映在響應中:
{"id":1,"content":"Hello, User!"}需要什么
大約15分鐘
JDK 1.8或更高版本
Gradle 4+或Maven 3.2+
如何完成本指南請執行以下操作:
下載并解壓縮本指南的源存儲庫,或使用Git克隆它:
git clone https://github.com/spring-guides/gs-rest-service.git
進入gs-rest-service/initial
完成后,你可以根據gs-rest-service/complete中的代碼檢查結果。
創建資源表示類現在你已經設置了項目和構建系統,你可以創建Web服務。
通過考慮服務交互來開始這個過程。
該服務將處理/greeting的GET請求,可選地在查詢字符串中使用name參數,GET請求應返回200 OK響應,其中JSON位于表示問候語的正文中,它應該看起來像這樣:
{ "id": 1, "content": "Hello, World!" }
id字段是問候語的唯一標識符,content是問候語的文本表示。
要為問候語表示建模,需要創建一個資源表示類,提供一個普通的java對象,其中包含id和content數據的字段、構造函數和訪問器:
src/main/java/hello/Greeting.java
package hello; public class Greeting { private final long id; private final String content; public Greeting(long id, String content) { this.id = id; this.content = content; } public long getId() { return id; } public String getContent() { return content; } }
正如你在下面的步驟中看到的那樣,Spring使用Jackson JSON庫自動將Greeting類型的實例編組為JSON。
接下來,你將創建將為這些問候語提供服務的資源控制器。
創建資源控制器在Spring構建RESTful Web服務的方法中,HTTP請求由控制器處理,這些組件可以通過@RestController注解輕松被識別,下面的GreetingController通過返回Greeting類的新實例來處理/greeting的GET請求:
src/main/java/hello/GreetingController.java
package hello; import java.util.concurrent.atomic.AtomicLong; import org.springframework.web.bind.annotation.RequestMapping; 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(); @RequestMapping("/greeting") public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } }
這個控制器簡潔并簡單,但它的內部有很多東西,讓我們一步一步地分解它。
@RequestMapping注解確保對/greeting的HTTP請求映射到greeting()方法。
上面的示例未指定GET與PUT、POST等,因為@RequestMapping默認映射所有HTTP操作,使用@RequestMapping(method=GET)縮小此映射范圍。
@RequestParam將查詢字符串參數name的值綁定到greeting()方法的name參數中,如果請求中不存在name參數,則使用“World”的defaultValue。
方法體的實現基于counter的下一個值和使用問候語template格式化給定name創建并返回具有id和content屬性的新Greeting對象。
傳統MVC控制器和上面的RESTful Web服務控制器之間的關鍵區別在于創建HTTP響應體的方式,這個RESTful Web服務控制器只是填充并返回一個Greeting對象,而不是依賴于視圖技術來執行問候數據到HTML的服務器端渲染,對象數據將作為JSON直接寫入HTTP響應。
此代碼使用Spring 4的新@RestController注解,它將類標記為控制器,其中每個方法都返回一個域對象而不是一個視圖,這是@Controller和@ResponseBody匯總在一起的簡寫。
Greeting對象必須轉換為JSON,由于Spring的HTTP消息轉換器支持,你無需手動執行此轉換,因為Jackson 2在類路徑上,所以會自動選擇Spring的MappingJackson2HttpMessageConverter將Greeting實例轉換為JSON。
使應用程序可執行雖然可以將此服務打包為傳統的WAR文件以便部署到外部應用程序服務器,但下面演示的更簡單的方法創建了一個獨立的應用程序,將所有內容打包在一個可執行的JAR文件中,由Java的main()方法驅動,在此過程中,你使用Spring的支持將Tomcat servlet容器嵌入為HTTP運行時,而不是部署到外部實例。
src/main/java/hello/Application.java
package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@SpringBootApplication是一個方便的注解,添加了以下所有內容:
@Configuration將類標記為應用程序上下文的bean定義源。
@EnableAutoConfiguration告訴Spring Boot根據類路徑設置、其他bean和各種屬性設置開始添加bean。
通常你會為Spring MVC應用添加@EnableWebMvc,但Spring Boot會在類路徑上看到spring-webmvc時自動添加它,這會將應用程序標記為Web應用程序并激活關鍵行為,例如設置DispatcherServlet。
@ComponentScan告訴Spring在hello包中查找其他組件、配置和服務,允許它找到控制器。
main()方法使用Spring Boot的SpringApplication.run()方法來啟動應用程序,你是否注意到沒有一行XML?也沒有web.xml文件,此Web應用程序是100%純Java,你無需處理配置任何管道或基礎結構。
構建可執行的JAR你可以使用Gradle或Maven從命令行運行該應用程序,或者,你可以構建一個包含所有必需依賴項、類和資源的可執行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":"Hello, World!"}
使用http://localhost:8080/greeting?name=User提供name查詢字符串參數,注意content屬性的值是如何從“Hello, World!”改變為“Hello, User!”:
{"id":2,"content":"Hello, User!"}
此更改表明GreetingController中的@RequestParam正在按預期工作,name參數的默認值為“World”,但始終可以通過查詢字符串顯式覆蓋。
另請注意id屬性如何從1更改為2,這證明你正在針對相同的GreetingController實例跨多個請求,并且其counter字段在每次調用時按預期遞增。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73139.html
摘要:指南無論你正在構建什么,這些指南都旨在讓你盡快提高工作效率使用團隊推薦的最新項目版本和技術。使用進行消息傳遞了解如何將用作消息代理。安全架構的主題指南,這些位如何組合以及它們如何與交互。使用的主題指南以及如何為應用程序創建容器鏡像。 Spring 指南 無論你正在構建什么,這些指南都旨在讓你盡快提高工作效率 — 使用Spring團隊推薦的最新Spring項目版本和技術。 入門指南 這些...
摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...
摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...
摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...
摘要:構建系統強烈建議你選擇一個支持依賴管理的構建系統,并且可以使用發布到中心存儲庫的工件。例如,要升級到另一個,你可以將以下元素添加到你的在前面的示例中,我們指定了一個,但是任何依賴類型都可以以相同的方式被覆蓋。 13. 構建系統 強烈建議你選擇一個支持依賴管理的構建系統,并且可以使用發布到Maven中心存儲庫的工件。我們建議你選擇Maven或Gradle,可以讓Spring Boot與其...
閱讀 2885·2021-10-18 13:33
閱讀 839·2019-08-30 14:20
閱讀 2619·2019-08-30 13:14
閱讀 2510·2019-08-29 18:38
閱讀 2878·2019-08-29 16:44
閱讀 1204·2019-08-29 15:23
閱讀 3466·2019-08-29 13:28
閱讀 1908·2019-08-28 18:00