天天新動(dòng)態(tài):如何使用 Spring 創(chuàng)建“Hello, World”RESTful Web 服務(wù)

2022-12-20 15:06:16 來(lái)源:51CTO博客

您將構(gòu)建什么

您將在 上構(gòu)建一個(gè)接受 HTTP GET 請(qǐng)求的服務(wù)。??http://localhost:8080/greeting??

它將使用問(wèn)候語(yǔ)的 JSON 表示形式進(jìn)行響應(yīng),如以下列表所示:


(資料圖)

{"id":1,"content":"Hello, World!"}

可以使用查詢字符串中的可選參數(shù)自定義問(wèn)候語(yǔ),如以下清單所示:??name??

http://localhost:8080/greeting?name=User

參數(shù)值將覆蓋 的默認(rèn)值,并反映在響應(yīng)中,如以下清單所示:??name????World??

{"id":1,"content":"Hello, User!"}

你需要什么

約15分鐘最喜歡的文本編輯器或 IDEJDK 1.8或以后格拉德?tīng)?4+或梅文 3.2+您也可以將代碼直接導(dǎo)入到 IDE 中:彈簧工具套件 (STS)智能理念VSCode

如何完成本指南

像大多數(shù)春天一樣入門指南,您可以從頭開(kāi)始并完成每個(gè)步驟,也可以繞過(guò)您已經(jīng)熟悉的基本設(shè)置步驟。無(wú)論哪種方式,您最終都會(huì)得到工作代碼。

要從頭開(kāi)始,請(qǐng)繼續(xù)從 Spring 初始化開(kāi)始.

要跳過(guò)基礎(chǔ)知識(shí),請(qǐng)執(zhí)行以下操作:

下載?并解壓縮本指南的源存儲(chǔ)庫(kù),或使用吉特:git clonehttps://github.com/spring-guides/gs-rest-service.git光盤成gs-rest-service/initial跳轉(zhuǎn)到創(chuàng)建資源表示類.

完成后,您可以根據(jù) 中的代碼檢查結(jié)果。??gs-rest-service/complete??

從 Spring 初始化開(kāi)始

你可以使用這個(gè)預(yù)初始化項(xiàng)目,然后單擊生成以下載 ZIP 文件。此項(xiàng)目配置為適合本教程中的示例。

手動(dòng)初始化項(xiàng)目:

導(dǎo)航到https://start.spring.io.此服務(wù)拉入應(yīng)用程序所需的所有依賴項(xiàng),并為您完成大部分設(shè)置。選擇 Gradle 或 Maven 以及您要使用的語(yǔ)言。本指南假定您選擇了 Java。單擊“依賴關(guān)系”,然后選擇“Spring Web”。單擊生成。下載生成的 ZIP 文件,該文件是配置了您選擇的 Web 應(yīng)用程序的存檔。

如果您的 IDE 集成了 Spring Initializr,則可以從 IDE 完成此過(guò)程。

您也可以從 Github 分叉項(xiàng)目,然后在 IDE 或其他編輯器中打開(kāi)它。

創(chuàng)建資源表示類

設(shè)置項(xiàng)目和生成系統(tǒng)后,可以創(chuàng)建 Web 服務(wù)了。

從考慮服務(wù)交互開(kāi)始該過(guò)程。

該服務(wù)將處理 的請(qǐng)求,(可選)在查詢字符串中使用參數(shù)。請(qǐng)求應(yīng)返回一個(gè)響應(yīng),其中包含表示問(wèn)候語(yǔ)的正文中的 JSON。它應(yīng)類似于以下輸出:??GET????/greeting????name????GET????200 OK??

{    "id": 1,    "content": "Hello, World!"}

該字段是問(wèn)候語(yǔ)的唯一標(biāo)識(shí)符,是問(wèn)候語(yǔ)的文本表示形式。??id????content??

若要對(duì)問(wèn)候語(yǔ)表示形式進(jìn)行建模,請(qǐng)創(chuàng)建資源表示形式類。為此,請(qǐng)?zhí)峁┮粋€(gè)普通的舊 Java 對(duì)象,其中包含 和 數(shù)據(jù)的字段、構(gòu)造函數(shù)和訪問(wèn)器,如以下清單(來(lái)自 )所示:??id????content????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) {    this.id = id;    this.content = content;  }  public long getId() {    return id;  }  public String getContent() {    return content;  }}

此應(yīng)用程序使用杰克遜·?庫(kù),用于自動(dòng)將類型的實(shí)例封送到 JSON 中。默認(rèn)情況下,網(wǎng)絡(luò)啟動(dòng)器包含杰克遜。??Greeting??

創(chuàng)建資源控制器

在Spring構(gòu)建RESTful Web服務(wù)的方法中,HTTP請(qǐng)求由控制器處理。這些組件由@RestController注釋,以及以下清單 (from ) 中顯示的 通過(guò)返回類的新實(shí)例來(lái)處理請(qǐng)求:??GreetingController????src/main/java/com/example/restservice/GreetingController.java????GET????/greeting????Greeting??

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;@RestControllerpublic 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));  }}

這個(gè)控制器簡(jiǎn)潔明了,但引擎蓋下有很多事情要做。我們一步一步地分解它。

注釋確保 HTTP GET 請(qǐng)求映射到方法。??@GetMapping????/greeting????greeting()??

其他 HTTP 動(dòng)詞也有配套注釋(例如 對(duì)于開(kāi)機(jī)自檢)。還有一個(gè)注釋,它們都派生自,并且可以作為同義詞(例如)。??@PostMapping????@RequestMapping????@RequestMapping(method=GET)??

??@RequestParam??將查詢字符串參數(shù)的值綁定到方法的參數(shù)中。如果請(qǐng)求中沒(méi)有該參數(shù),則使用 of。??name????name????greeting()????name????defaultValue????World??

方法主體的實(shí)現(xiàn)創(chuàng)建并返回一個(gè)新對(duì)象,該對(duì)象基于 和 的下一個(gè)值 和 屬性 通過(guò)使用問(wèn)候語(yǔ)格式化給定的格式。??Greeting????id????content????counter????name????template??

傳統(tǒng) MVC 控制器和前面顯示的 RESTful Web 服務(wù)控制器之間的主要區(qū)別在于創(chuàng)建 HTTP 響應(yīng)正文的方式。這個(gè) RESTful Web 服務(wù)控制器不是依靠視圖技術(shù)來(lái)執(zhí)行問(wèn)候數(shù)據(jù)到 HTML 的服務(wù)器端呈現(xiàn),而是填充并返回一個(gè)對(duì)象。對(duì)象數(shù)據(jù)將作為 JSON 直接寫入 HTTP 響應(yīng)。??Greeting??

此代碼使用 Spring@RestController注釋,它將類標(biāo)記為控制器,其中每個(gè)方法都返回域?qū)ο蠖皇且晥D。它是包含 和 的簡(jiǎn)寫。??@Controller????@ResponseBody??

該對(duì)象必須轉(zhuǎn)換為 JSON。由于 Spring 的 HTTP 消息轉(zhuǎn)換器支持,您無(wú)需手動(dòng)進(jìn)行此轉(zhuǎn)換。因?yàn)??Greeting??杰克遜 2在類路徑上,春天的MappingJackson2HttpMessageConverter自動(dòng)選擇將實(shí)例轉(zhuǎn)換為 JSON。??Greeting??

??@SpringBootApplication??是一個(gè)方便的注釋,它添加了以下所有內(nèi)容:

??@Configuration??:將類標(biāo)記為應(yīng)用程序上下文的 Bean 定義源。??@EnableAutoConfiguration??:告訴 Spring 引導(dǎo)根據(jù)類路徑設(shè)置、其他 bean 和各種屬性設(shè)置開(kāi)始添加 bean。例如,如果 在類路徑上,則此注釋會(huì)將應(yīng)用程序標(biāo)記為 Web 應(yīng)用程序并激活關(guān)鍵行為,例如設(shè)置 .spring-webmvcDispatcherServlet??@ComponentScan??:告訴 Spring 在包中查找其他組件、配置和服務(wù),讓它找到控制器。com/example

該方法使用 Spring Boot 的方法啟動(dòng)應(yīng)用程序。您是否注意到?jīng)]有一行 XML?也沒(méi)有文件。此 Web 應(yīng)用程序是 100% 純 Java,您無(wú)需處理配置任何管道或基礎(chǔ)結(jié)構(gòu)。??main()????SpringApplication.run()????web.xml??

構(gòu)建可執(zhí)行的 JAR

您可以使用 Gradle 或 Maven 從命令行運(yùn)行應(yīng)用程序。您還可以構(gòu)建一個(gè)包含所有必需依賴項(xiàng)、類和資源的可執(zhí)行 JAR 文件并運(yùn)行該文件。通過(guò)構(gòu)建可執(zhí)行 jar,可以輕松地在整個(gè)開(kāi)發(fā)生命周期中跨不同環(huán)境等將服務(wù)作為應(yīng)用程序進(jìn)行交付、版本控制和部署。

如果使用 Gradle,則可以使用 .或者,您可以使用 JAR 文件生成 JAR 文件,然后運(yùn)行該文件,如下所示:??./gradlew bootRun????./gradlew build??

java -jar build/libs/gs-rest-service-0.1.0.jar

如果使用 Maven,則可以使用 運(yùn)行應(yīng)用程序。或者,您可以使用 JAR 文件生成 JAR 文件,然后運(yùn)行該文件,如下所示:??./mvnw spring-boot:run????./mvnw clean package??

java -jar target/gs-rest-service-0.1.0.jar

此處描述的步驟將創(chuàng)建一個(gè)可運(yùn)行的 JAR。你也可以構(gòu)建經(jīng)典 WAR 文件.

將顯示日志記錄輸出。該服務(wù)應(yīng)在幾秒鐘內(nèi)啟動(dòng)并運(yùn)行。

測(cè)試服務(wù)

現(xiàn)在服務(wù)已啟動(dòng),請(qǐng)?jiān)L問(wèn) ,您應(yīng)該在其中看到:??http://localhost:8080/greeting??

{"id":1,"content":"Hello, World!"}

通過(guò)訪問(wèn)提供查詢字符串參數(shù)。請(qǐng)注意屬性的值如何從 更改為 ,如下面的清單所示:??name????http://localhost:8080/greeting?name=User????content????Hello, World!????Hello, User!??

{"id":2,"content":"Hello, User!"}

此更改表明 中的安排按預(yù)期工作。參數(shù)的默認(rèn)值為 ,但可以通過(guò)查詢字符串顯式重寫。??@RequestParam????GreetingController????name????World??

另請(qǐng)注意屬性是如何從 更改為 的。這證明您正在跨多個(gè)請(qǐng)求處理同一實(shí)例,并且其字段在每次調(diào)用時(shí)按預(yù)期遞增。??id????1????2????GreetingController????counter??

總結(jié)

祝賀!您剛剛使用 Spring 開(kāi)發(fā)了一個(gè) RESTful Web 服務(wù)。

參見(jiàn)

以下指南也可能有所幫助:

使用 REST 訪問(wèn) GemFire 數(shù)據(jù)使用 REST 訪問(wèn) MongoDB 數(shù)據(jù)使用 MySQL 訪問(wèn)數(shù)據(jù)使用 REST 訪問(wèn) JPA 數(shù)據(jù)使用 REST 訪問(wèn) Neo4j 數(shù)據(jù)使用 RESTful Web 服務(wù)使用 AngularJS 使用 RESTful Web 服務(wù)使用 jQuery 使用 RESTful Web 服務(wù)將 RESTful Web 服務(wù)與 rest 一起使用.js保護(hù) Web 應(yīng)用程序使用 Spring 構(gòu)建 REST 服務(wù)React.js 和 Spring Data REST使用 Spring 引導(dǎo)構(gòu)建應(yīng)用程序使用 Restdocs 創(chuàng)建 API 文檔為 REST 富 Web 服務(wù)啟用跨源請(qǐng)求構(gòu)建超媒體驅(qū)動(dòng)的 RESTful Web 服務(wù)斷路器

想要編寫新指南或?yàn)楝F(xiàn)有指南做出貢獻(xiàn)?查看我們的貢獻(xiàn)準(zhǔn)則.

標(biāo)簽: 應(yīng)用程序 從頭開(kāi)始 一個(gè)對(duì)象

上一篇:環(huán)球快訊:如何使用 Spring Boot 構(gòu)建一個(gè)簡(jiǎn)單的 Web 應(yīng)用程序
下一篇:Linux 安裝 Mysql