
本指南將引導(dǎo)您完成創(chuàng)建使用 RESTful Web 服務(wù)的應(yīng)用程序的過程。
您將構(gòu)建一個(gè)應(yīng)用程序,該應(yīng)用程序使用 Spring 的來檢索隨機(jī)的 Spring 啟動(dòng)報(bào)價(jià)??RestTemplate?
???http://localhost:8080/api/random??.
(資料圖片)
像大多數(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?
?
你可以使用這個(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 或其他編輯器中打開它。 |
項(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ù)字段。
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?
?
RestTemplate
在啟動(dòng)時(shí)運(yùn)行(并因此獲取我們的報(bào)價(jià))。CommandLineRunner
RestTemplate
以下清單顯示了已完成的類(位于):??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()); }; }}
您可以使用 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)境的值。? |
祝賀!您剛剛使用 Spring Boot 開發(fā)了一個(gè)簡(jiǎn)單的 REST 客戶端。
標(biāo)簽: 應(yīng)用程序 從頭開始 基本設(shè)置