摘要:創(chuàng)建資源類假設(shè)你已經(jīng)設(shè)置了項(xiàng)目和構(gòu)建系統(tǒng),你可以創(chuàng)建服務(wù)。該請(qǐng)求應(yīng)該返回在表示問(wèn)候的身體與響應(yīng)。創(chuàng)建資源控制器在構(gòu)建服務(wù)的方法中,請(qǐng)求由控制器處理。對(duì)象數(shù)據(jù)將作為直接寫(xiě)入響應(yīng)。該對(duì)象必須轉(zhuǎn)換為。
創(chuàng)建資源類
假設(shè)你已經(jīng)設(shè)置了項(xiàng)目和構(gòu)建系統(tǒng),你可以創(chuàng)建Web服務(wù)。
通過(guò)考慮服務(wù)交互來(lái)開(kāi)始這個(gè)過(guò)程。
該服務(wù)將處理GET請(qǐng)求/greeting,可選地使用name查詢字符串中的參數(shù)。該GET請(qǐng)求應(yīng)該返回200 OK在表示問(wèn)候的身體與JSON響應(yīng)。它應(yīng)該看起來(lái)像這樣:
{ "id": 1, "content": "Hello, World!" }
該id字段是問(wèn)候語(yǔ)的唯一標(biāo)識(shí)符,是問(wèn)候語(yǔ)content的文本表示。
要為問(wèn)候語(yǔ)表示建模,請(qǐng)創(chuàng)建資源表示形式類。提供一個(gè)普通的舊java對(duì)象,其中包含id和content數(shù)據(jù)的字段,構(gòu)造函數(shù)和訪問(wèn)器:
@Data @AllArgsConstructor public class Greeting { private final long id; private final String content; }
正如你在下面的步驟中看到的,Spring使用Jackson JSON庫(kù)自動(dòng)將類型實(shí)例Greeting封送到JSON中。創(chuàng)建資源控制器
在Spring構(gòu)建RESTful Web服務(wù)的方法中,HTTP請(qǐng)求由控制器處理。這些組件很容易通過(guò)@RestController注釋來(lái)識(shí)別,GreetingController下面通過(guò)返回類的新實(shí)例來(lái)處理GET請(qǐng)求:
@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)); } }
這個(gè)控制器簡(jiǎn)潔而簡(jiǎn)單,但引擎下有很多東西,讓我們一步一步地分解它。
所述@RequestMapping注釋可以確保HTTP請(qǐng)求/greeting被映射到greeting()方法。
上面的示例未指定GETvs. PUT,POST等等,因?yàn)锧RequestMapping默認(rèn)情況下映射所有HTTP操作。使用@RequestMapping(method=GET)縮小這種映射。
@RequestParam將查詢字符串參數(shù)的值綁定name到方法的name參數(shù)中g(shù)reeting()。如果name請(qǐng)求中不存在該參數(shù),defaultValue則使用“World”。
方法體的實(shí)現(xiàn)基于來(lái)自的下一個(gè)值創(chuàng)建并返回Greeting具有id和content屬性的新對(duì)象,并使用問(wèn)候counter格式化給定name的格式template。
傳統(tǒng)MVC控制器和上面的RESTful Web服務(wù)控制器之間的關(guān)鍵區(qū)別在于創(chuàng)建HTTP響應(yīng)主體的方式。這個(gè)RESTful Web服務(wù)控制器只是填充并返回一個(gè)對(duì)象,而不是依靠視圖技術(shù)來(lái)執(zhí)行將問(wèn)候數(shù)據(jù)的服務(wù)器端呈現(xiàn)為HTML Greeting。對(duì)象數(shù)據(jù)將作為JSON直接寫(xiě)入HTTP響應(yīng)。
此代碼使用Spring 4的新@RestController注釋,它將類標(biāo)記為控制器,其中每個(gè)方法都返回一個(gè)域?qū)ο蠖皇且晥D。它是速記@Controller和@ResponseBody拼湊在一起的。
該Greeting對(duì)象必須轉(zhuǎn)換為JSON。由于Spring的HTTP消息轉(zhuǎn)換器支持,您無(wú)需手動(dòng)執(zhí)行此轉(zhuǎn)換。因?yàn)镴ackson 2在類路徑上,所以MappingJackson2HttpMessageConverter會(huì)自動(dòng)選擇Spring 來(lái)將Greeting實(shí)例轉(zhuǎn)換為JSON。
使應(yīng)用程序可執(zhí)行雖然可以將此服務(wù)打包為傳統(tǒng)的WAR文件以部署到外部應(yīng)用程序服務(wù)器,但下面演示的更簡(jiǎn)單的方法創(chuàng)建了一個(gè)獨(dú)立的應(yīng)用程序。您將所有內(nèi)容打包在一個(gè)可執(zhí)行的JAR文件中,由一個(gè)好的舊Java main()方法驅(qū)動(dòng)。在此過(guò)程中,您使用Spring的支持將Tomcat servlet容器嵌入為HTTP運(yùn)行時(shí),而不是部署到外部實(shí)例。
@SpringBootApplication public class RestfulWebApplication { public static void main(String[] args) { SpringApplication.run(RestfulWebApplication.class, args); } }
@SpringBootApplication 是一個(gè)便利注釋,添加了以下所有內(nèi)容:
@Configuration 標(biāo)記該類作為應(yīng)用程序上下文的bean定義的源。
@EnableAutoConfiguration 告訴Spring Boot開(kāi)始根據(jù)類路徑設(shè)置,其他bean和各種屬性設(shè)置添加bean。
通常你會(huì)添加@EnableWebMvc一個(gè)Spring MVC應(yīng)用程序,但Spring Boot會(huì)在類路徑上看到spring-webmvc時(shí)自動(dòng)添加它。這會(huì)將應(yīng)用程序標(biāo)記為Web應(yīng)用程序并激活關(guān)鍵行為,例如設(shè)置a DispatcherServlet.
@ComponentScan告訴Spring在包中尋找其他組件,配置和服務(wù)hello,允許它找到控制器。
該main()方法使用Spring Boot的SpringApplication.run()方法來(lái)啟動(dòng)應(yīng)用程序。您是否注意到?jīng)]有一行XML?也沒(méi)有web.xml文件。此Web應(yīng)用程序是100%純Java,您無(wú)需處理配置任何管道或基礎(chǔ)結(jié)構(gòu)。
構(gòu)建可執(zhí)行的JAR您可以使用Gradle或Maven從命令行運(yùn)行該應(yīng)用程序。或者,您可以構(gòu)建一個(gè)包含所有必需依賴項(xiàng),類和資源的可執(zhí)行JAR文件,并運(yùn)行該文件。這使得在整個(gè)開(kāi)發(fā)生命周期中,跨不同環(huán)境等將服務(wù)作為應(yīng)用程序發(fā)布,版本和部署變得容易。
如果您使用的是Gradle,則可以使用運(yùn)行該應(yīng)用程序./gradlew bootRun?;蛘吣梢允褂脴?gòu)建JAR文件./gradlew build。然后你可以運(yùn)行JAR文件:
java -jar build / libs / gs-rest-service-0.1.0.jar
如果您使用的是Maven,則可以使用該應(yīng)用程序運(yùn)行該應(yīng)用程序./mvnw spring-boot:run?;蛘吣梢允褂脴?gòu)建JAR文件./mvnw clean package。然后你可以運(yùn)行JAR文件:
java -jar target / gs-rest-service-0.1.0.jar測(cè)試服務(wù)
現(xiàn)在該服務(wù)已啟動(dòng),請(qǐng)?jiān)L問(wèn)http:// localhost:8080 / greeting,其中顯示:
{"id":1,"content":"Hello, World!"}
name使用http:// localhost:8080 / greeting?name = User提供查詢字符串參數(shù)。注意content屬性的值如何從“Hello,World!”改變?!澳愫?,用戶!”:
{"id":2,"content":"Hello, User!"}
此更改表明該@RequestParam安排GreetingController正在按預(yù)期工作。該name參數(shù)已被賦予默認(rèn)值“World”,但始終可以通過(guò)查詢字符串顯式覆蓋。
另請(qǐng)注意id屬性如何從更改1為2。這證明您正在GreetingController跨多個(gè)請(qǐng)求針對(duì)同一實(shí)例工作,并且其counter字段在每次調(diào)用時(shí)按預(yù)期遞增。
結(jié)尾恭喜!您剛剛使用Spring開(kāi)發(fā)了RESTful Web服務(wù)。
GitHub:Restful-Web
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72315.html
摘要:指南無(wú)論你正在構(gòu)建什么,這些指南都旨在讓你盡快提高工作效率使用團(tuán)隊(duì)推薦的最新項(xiàng)目版本和技術(shù)。使用進(jìn)行消息傳遞了解如何將用作消息代理。安全架構(gòu)的主題指南,這些位如何組合以及它們?nèi)绾闻c交互。使用的主題指南以及如何為應(yīng)用程序創(chuàng)建容器鏡像。 Spring 指南 無(wú)論你正在構(gòu)建什么,這些指南都旨在讓你盡快提高工作效率 — 使用Spring團(tuán)隊(duì)推薦的最新Spring項(xiàng)目版本和技術(shù)。 入門指南 這些...
摘要:菜鳥(niǎo)教程框架中文手冊(cè)入門目標(biāo)使用搭建通過(guò)對(duì)數(shù)據(jù)增刪查改沒(méi)了純粹占行用的拜 后端API入門學(xué)習(xí)指北 了解一下一下概念. RESTful API標(biāo)準(zhǔn)] 所有的API都遵循[RESTful API標(biāo)準(zhǔn)]. 建議大家都簡(jiǎn)單了解一下HTTP協(xié)議和RESTful API相關(guān)資料. 阮一峰:理解RESTful架構(gòu) 阮一峰:RESTful API 設(shè)計(jì)指南 RESTful API指南 依賴注入 D...
摘要:菜鳥(niǎo)教程框架中文手冊(cè)入門目標(biāo)使用搭建通過(guò)對(duì)數(shù)據(jù)增刪查改沒(méi)了純粹占行用的拜 后端API入門學(xué)習(xí)指北 了解一下一下概念. RESTful API標(biāo)準(zhǔn)] 所有的API都遵循[RESTful API標(biāo)準(zhǔn)]. 建議大家都簡(jiǎn)單了解一下HTTP協(xié)議和RESTful API相關(guān)資料. 阮一峰:理解RESTful架構(gòu) 阮一峰:RESTful API 設(shè)計(jì)指南 RESTful API指南 依賴注入 D...
摘要:菜鳥(niǎo)教程框架中文手冊(cè)入門目標(biāo)使用搭建通過(guò)對(duì)數(shù)據(jù)增刪查改沒(méi)了純粹占行用的拜 后端API入門學(xué)習(xí)指北 了解一下一下概念. RESTful API標(biāo)準(zhǔn)] 所有的API都遵循[RESTful API標(biāo)準(zhǔn)]. 建議大家都簡(jiǎn)單了解一下HTTP協(xié)議和RESTful API相關(guān)資料. 阮一峰:理解RESTful架構(gòu) 阮一峰:RESTful API 設(shè)計(jì)指南 RESTful API指南 依賴注入 D...
摘要:的機(jī)器學(xué)習(xí)庫(kù)的機(jī)器學(xué)習(xí)庫(kù),包括算法交叉驗(yàn)證神經(jīng)網(wǎng)絡(luò)等內(nèi)容。在即將到來(lái)的大會(huì)上,她將和大家分享在機(jī)器學(xué)習(xí)領(lǐng)域的全新可能。入門總結(jié)入門相關(guān),如安裝配置基本使用等。 基于 Swoole 開(kāi)發(fā) PHP 擴(kuò)展 Swoole-1.9.7 增加了一個(gè)新特性,可以基于 Swoole 使用 C++ 語(yǔ)言開(kāi)發(fā)擴(kuò)展模塊,在擴(kuò)展模塊中可以注冊(cè) PHP 內(nèi)置函數(shù)和類?,F(xiàn)在可以基于 Swoole 來(lái)編寫(xiě) PHP ...
閱讀 2173·2021-09-04 16:40
閱讀 1471·2021-08-13 15:07
閱讀 3612·2019-08-30 15:53
閱讀 3204·2019-08-30 13:11
閱讀 1082·2019-08-29 17:22
閱讀 1821·2019-08-29 12:47
閱讀 1481·2019-08-29 11:27
閱讀 2235·2019-08-26 18:42