環(huán)球熱頭條丨創(chuàng)建使用 RESTful Web 服務(wù)的應(yīng)用程序的過程

2022-12-21 10:23:21 來源:51CTO博客

本指南將引導(dǎo)您完成創(chuàng)建使用 RESTful Web 服務(wù)的應(yīng)用程序的過程。

您將構(gòu)建什么

您將構(gòu)建一個(gè)應(yīng)用程序,該應(yīng)用程序使用 Spring 的來檢索隨機(jī)的 Spring 啟動(dòng)報(bào)價(jià)??RestTemplate????http://localhost:8080/api/random??.


(資料圖片)

你需要什么

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

如何完成本指南

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

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

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

下載并解壓縮本指南的源存儲(chǔ)庫,或使用吉特:git clonehttps://github.com/spring-guides/gs-consuming-rest.git光盤成gs-consuming-rest/initial跳轉(zhuǎn)到獲取 REST 資源.

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

從 Spring 初始化開始

你可以使用這個(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 以及您要使用的語言。本指南假定您選擇了 Java。單擊“依賴關(guān)系”,然后選擇“Spring Web”。單擊生成。下載生成的 ZIP 文件,該文件是配置了您選擇的 Web 應(yīng)用程序的存檔。

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

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

獲取 REST 資源

項(xiàng)目設(shè)置完成后,您可以創(chuàng)建一個(gè)使用 RESTful 服務(wù)的簡(jiǎn)單應(yīng)用程序。

在執(zhí)行此操作之前,您需要一個(gè) REST 資源源。我們提供了此類服務(wù)的示例https://github.com/spring-guides/quoters.您可以在單獨(dú)的終端中運(yùn)行該應(yīng)用程序,并在??http://localhost:8080/api/random??.該地址隨機(jī)獲取有關(guān)Spring Boot的報(bào)價(jià),并將其作為JSON文檔返回。其他有效地址包括??http://localhost:8080/api/??(對(duì)于所有報(bào)價(jià))和??http://localhost:8080/api/1??(第一次報(bào)價(jià)),??http://localhost:8080/api/2??(對(duì)于第二個(gè)報(bào)價(jià)),依此類推(目前最多 10 個(gè))。

如果您通過 Web 瀏覽器或 curl 請(qǐng)求該 URL,則會(huì)收到如下所示的 JSON 文檔:

{   type: "success",   value: {      id: 10,      quote: "Really loving Spring Boot, makes stand alone Spring apps easy."   }}

這很容易,但在通過瀏覽器或 curl 獲取時(shí)并不是很有用。

使用 REST Web 服務(wù)的更有用方法是以編程方式使用。為了幫助你完成這項(xiàng)任務(wù),Spring 提供了一個(gè)方便的模板類,稱為RestTemplate. 使與大多數(shù) RESTful 服務(wù)的交互成為單行咒語。它甚至可以將數(shù)據(jù)綁定到自定義域類型。??RestTemplate??

首先,您需要?jiǎng)?chuàng)建一個(gè)域類來包含所需的數(shù)據(jù)。以下清單顯示了可用作域類的類:??Quote??

??src/main/java/com/example/consumingrest/Quote.java??

package com.example.consumingrest;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;@JsonIgnoreProperties(ignoreUnknown = true)public class Quote {  private String type;  private Value value;  public Quote() {  }  public String getType() {    return type;  }  public void setType(String type) {    this.type = type;  }  public Value getValue() {    return value;  }  public void setValue(Value value) {    this.value = value;  }  @Override  public String toString() {    return "Quote{" +        "type="" + type + "\"" +        ", value=" + value +        "}";  }}

這個(gè)簡(jiǎn)單的Java類有一些屬性和匹配的getter方法。它使用杰克遜 JSON 處理庫中的注釋,以指示應(yīng)忽略此類型中未綁定的任何屬性。??@JsonIgnoreProperties??

若要將數(shù)據(jù)直接綁定到自定義類型,需要指定變量名稱與從 API 返回的 JSON 文檔中的鍵完全相同。如果 JSON 文檔中的變量名稱和鍵不匹配,您可以使用注釋來指定 JSON 文檔的確切鍵。(此示例將每個(gè)變量名稱與 JSON 鍵匹配,因此此處不需要該注釋。??@JsonProperty??

您還需要一個(gè)額外的類來嵌入內(nèi)部引號(hào)本身。該類滿足了該需求,并顯示在以下列表中(在):??Value????src/main/java/com/example/consumingrest/Value.java??

package com.example.consumingrest;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;@JsonIgnoreProperties(ignoreUnknown = true)public class Value {  private Long id;  private String quote;  public Value() {  }  public Long getId() {    return this.id;  }  public String getQuote() {    return this.quote;  }  public void setId(Long id) {    this.id = id;  }  public void setQuote(String quote) {    this.quote = quote;  }  @Override  public String toString() {    return "Value{" +        "id=" + id +        ", quote="" + quote + "\"" +        "}";  }}

這使用相同的注釋,但映射到其他數(shù)據(jù)字段。

完成申請(qǐng)

Initalizr 使用方法創(chuàng)建一個(gè)類。下面的清單顯示了初始化者創(chuàng)建的類(在):??main()????src/main/java/com/example/consumingrest/ConsumingRestApplication.java??

package com.example.consumingrest;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ConsumingRestApplication {  public static void main(String[] args) {    SpringApplication.run(ConsumingRestApplication.class, args);  }}

現(xiàn)在你需要在類中添加一些其他的東西,讓它顯示來自我們的 RESTful 源的引文。您需要添加:??ConsumingRestApplication??

記錄器,用于將輸出發(fā)送到日志(在本例中為控制臺(tái))。A ,它使用杰克遜 JSON 處理庫來處理傳入的數(shù)據(jù)。RestTemplate在啟動(dòng)時(shí)運(yùn)行(并因此獲取我們的報(bào)價(jià))。CommandLineRunnerRestTemplate

以下清單顯示了已完成的類(位于):??ConsumingRestApplication????src/main/java/com/example/consumingrest/ConsumingRestApplication.java??

package com.example.consumingrest;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.client.RestTemplateBuilder;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate;@SpringBootApplicationpublic class ConsumingRestApplication {  private static final Logger log = LoggerFactory.getLogger(ConsumingRestApplication.class);  public static void main(String[] args) {    SpringApplication.run(ConsumingRestApplication.class, args);  }  @Bean  public RestTemplate restTemplate(RestTemplateBuilder builder) {    return builder.build();  }  @Bean  public CommandLineRunner run(RestTemplate restTemplate) throws Exception {    return args -> {      Quote quote = restTemplate.getForObject(          "http://localhost:8080/api/random", Quote.class);      log.info(quote.toString());    };  }}

運(yùn)行應(yīng)用程序

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

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

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

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

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

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

您應(yīng)該看到類似于以下內(nèi)容的輸出,但帶有隨機(jī)引號(hào):

2019-08-22 14:06:46.506  INFO 42940 --- [           main] c.e.c.ConsumingRestApplication           : Quote{type="success", value=Value{id=1, quote="Working with Spring Boot is like pair-programming with the Spring developers."}}

如果您看到錯(cuò)誤為 ,則可能是您所處的環(huán)境無法連接到后端服務(wù)(如果可以訪問后端服務(wù),則發(fā)送 JSON)。也許你在公司代理后面。嘗試將 和 系統(tǒng)屬性設(shè)置為適合您的環(huán)境的值。??Could not extract response: no suitable HttpMessageConverter found for response type [class com.example.consumingrest.Quote]????http.proxyHost????http.proxyPort??

總結(jié)

祝賀!您剛剛使用 Spring Boot 開發(fā)了一個(gè)簡(jiǎn)單的 REST 客戶端。

標(biāo)簽: 應(yīng)用程序 從頭開始 基本設(shè)置

上一篇:環(huán)球焦點(diǎn)!centos7.5安裝redmine-3.4.6-5
下一篇:#yyds干貨盤點(diǎn)# react筆記之學(xué)習(xí)之存儲(chǔ)到一個(gè)state對(duì)象中