本指南將引導(dǎo)您完成創(chuàng)建使用#spring# #spring認證# RESTful Web 服務(wù)的應(yīng)用程序的過程。
你將建造什么
您將構(gòu)建一個應(yīng)用程序,該應(yīng)用程序使用 SpringRestTemplate在
https://quoters.apps.pcfone.io/api/random檢索隨機 Spring Boot 報價。
你需要什么
- 約15分鐘
- 最喜歡的文本編輯器或 IDE
- JDK 1.8或更高版本
- Gradle 4+或Maven 3.2+
-
您還可以將代碼直接導(dǎo)入 IDE:
- 彈簧工具套件 (STS)
- IntelliJ IDEA
如何完成本指南
像大多數(shù) Spring入門指南一樣,您可以從頭開始并完成每個步驟,也可以繞過您已經(jīng)熟悉的基本設(shè)置步驟。無論哪種方式,您最終都會得到工作代碼。
要從頭開始,請繼續(xù)從 Spring Initializr 開始。
要跳過基礎(chǔ)知識,請執(zhí)行以下操作:
- 下載并解壓縮本指南的源存儲庫,或使用Git克隆它:git clone https://github.com/spring-guides/gs-consuming-rest.git
- 光盤進入gs-consuming-rest/initial
- 跳轉(zhuǎn)到獲取 REST 資源。
完成后,您可以對照中的代碼檢查結(jié)果
gs-consuming-rest/complete。
從 Spring Initializr 開始
您可以使用這個預(yù)先初始化的項目并單擊 Generate 下載 ZIP 文件。此項目配置為適合本教程中的示例。
手動初始化項目:
- 導(dǎo)航到https://start.spring.io。該服務(wù)提取應(yīng)用程序所需的所有依賴項,并為您完成大部分設(shè)置。
- 選擇 Gradle 或 Maven 以及您要使用的語言。本指南假定您選擇了 Java。
- 單擊Dependencies并選擇Spring Web。
- 單擊生成。
- 下載生成的 ZIP 文件,該文件是根據(jù)您的選擇配置的 Web 應(yīng)用程序的存檔。
如果您的 IDE 具有 Spring Initializr 集成,您可以從您的 IDE 完成此過程。
你也可以從 Github 上 fork 項目并在你的 IDE 或其他編輯器中打開它。
獲取 REST 資源
完成項目設(shè)置后,您可以創(chuàng)建一個使用 RESTful 服務(wù)的簡單應(yīng)用程序。
一個 RESTful 服務(wù)已經(jīng)在
https://quoters.apps.pcfone.io/api/random建立起來。它隨機獲取有關(guān) Spring Boot 的引用并將它們作為 JSON 文檔返回。
如果您通過 Web 瀏覽器或 curl 請求該 URL,您會收到如下所示的 JSON 文檔:
{
type: "success",
value: {
id: 10,
quote: "Really loving Spring Boot, makes stand alone Spring apps easy."
}
}復(fù)制
這很容易,但在通過瀏覽器或 curl 獲取時并不是非常有用。
以編程方式使用 REST Web 服務(wù)的更有用的方法。為了幫助您完成這項任務(wù),Spring 提供了一個方便的模板類,稱為RestTemplate. RestTemplate使與大多數(shù) RESTful 服務(wù)的交互成為單行咒語。它甚至可以將該數(shù)據(jù)綁定到自定義域類型。
首先,您需要創(chuàng)建一個域類來包含您需要的數(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 +
'}';
}
}復(fù)制
這個簡單的 Java 類有一些屬性和匹配的 getter 方法。它帶有@JsonIgnoreProperties來自 Jackson JSON 處理庫的注釋,表示任何未綁定在此類型中的屬性都應(yīng)被忽略。
要將您的數(shù)據(jù)直接綁定到您的自定義類型,您需要將變量名稱指定為與從 API 返回的 JSON 文檔中的鍵完全相同。如果您的 JSON 文檔中的變量名稱和鍵不匹配,您可以使用@JsonProperty注釋來指定 JSON 文檔的確切鍵。(此示例將每個變量名稱與 JSON 鍵匹配,因此此處不需要該注釋。)
您還需要一個額外的類來嵌入內(nèi)部引用本身。該類Value滿足了這一需求,并顯示在以下清單 (at
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 + '\'' +
'}';
}
}復(fù)制
這使用相同的注釋,但映射到其他數(shù)據(jù)字段。
完成申請
Initalizr 創(chuàng)建一個帶有main()方法的類。以下清單顯示了 Initializr 創(chuàng)建的類(at
src/main/java/com/example/consumingrest/ConsumingRestApplication.java):
package com.example.consumingrest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ConsumingRestApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumingRestApplication.class, args);
}
}復(fù)制
現(xiàn)在您需要向ConsumingRestApplication該類添加一些其他內(nèi)容,以使其顯示來自我們 RESTful 源的引用。您需要添加:
- 一個記錄器,用于將輸出發(fā)送到日志(在此示例中為控制臺)。
- A RestTemplate,它使用 Jackson JSON 處理庫來處理傳入的數(shù)據(jù)。
- A在啟動CommandLineRunner時運行RestTemplate(并因此獲取我們的報價)。
以下清單顯示了完成的ConsumingRestApplication類 (at
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;
@SpringBootApplication
public 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(
"https://quoters.apps.pcfone.io/api/random", Quote.class);
log.info(quote.toString());
};
}
}復(fù)制
運行應(yīng)用程序
您可以使用 Gradle 或 Maven 從命令行運行應(yīng)用程序。您還可以構(gòu)建一個包含所有必要依賴項、類和資源的單個可執(zhí)行 JAR 文件并運行它。構(gòu)建可執(zhí)行 jar 可以在整個開發(fā)生命周期、跨不同環(huán)境等中輕松地作為應(yīng)用程序交付、版本化和部署服務(wù)。
如果您使用 Gradle,則可以使用./gradlew bootRun. 或者,您可以使用構(gòu)建 JAR 文件./gradlew build,然后運行 ?JAR 文件,如下所示:
java -jar build/libs/gs-sumption-rest-0.1.0.jar
如果您使用 Maven,則可以使用./mvnw spring-boot:run. 或者,您可以使用構(gòu)建 JAR 文件,./mvnw clean package然后運行該 JAR 文件,如下所示:
java -jar 目標(biāo)/gs-消費-rest-0.1.0.jar
此處描述的步驟創(chuàng)建了一個可運行的 JAR。您還可以構(gòu)建經(jīng)典的 WAR 文件。
您應(yīng)該看到類似于以下的輸出,但帶有隨機引用:
2019-08-22 14:06:46.506 INFO 42940 --- [main] cecConsumingRestApplication : Quote{type='success', value=Value{id=1
如果您看到顯示為 的錯誤,Could not extract response: no suitable HttpMessageConverter found for response type [class
com.example.consumingrest.Quote]則可能是您處于無法連接到后端服務(wù)的環(huán)境中(如果您可以訪問它,它將發(fā)送 JSON)。也許您是公司代理的幕后黑手。嘗試將http.proxyHost和http.proxyPort系統(tǒng)屬性設(shè)置為適合您的環(huán)境的值。
概括
恭喜!您剛剛使用 Spring Boot 開發(fā)了一個簡單的 REST 客戶端。
審核編輯:湯梓紅
-
Web
+關(guān)注
關(guān)注
2文章
1255瀏覽量
69292 -
spring
+關(guān)注
關(guān)注
0文章
338瀏覽量
14295 -
Restful
+關(guān)注
關(guān)注
0文章
11瀏覽量
3525
發(fā)布評論請先 登錄
相關(guān)推薦
評論