0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用RESTful Web服務(wù)的過程

「Spring」認證安全架構(gòu) ? 來源:「Spring」認證安全架構(gòu) ? 作者:「Spring」認證安全 ? 2022-09-06 15:47 ? 次閱讀

本指南將引導(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 文件。此項目配置為適合本教程中的示例。

手動初始化項目:

  1. 導(dǎo)航到https://start.spring.io。該服務(wù)提取應(yīng)用程序所需的所有依賴項,并為您完成大部分設(shè)置。
  2. 選擇 Gradle 或 Maven 以及您要使用的語言。本指南假定您選擇了 Java。
  3. 單擊Dependencies并選擇Spring Web。
  4. 單擊生成。
  5. 下載生成的 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 客戶端。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1255

    瀏覽量

    69292
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    338

    瀏覽量

    14295
  • Restful
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    3525
收藏 人收藏

    評論

    相關(guān)推薦

    請問LabVIEW通過無線WiFi采集數(shù)據(jù) 基于restful

    本帖最后由 eehome 于 2013-1-5 09:47 編輯 求助,有沒有兄弟做過相關(guān)的項目啊,labview編寫一個程序作為一個web service,基于restful。 需要將采集到
    發(fā)表于 03-22 18:08

    編寫restful

    求助,有沒有兄弟做過相關(guān)的項目啊,現(xiàn)在寫了一個程序作為一個web service,基于restful。 需要將采集到的數(shù)據(jù)經(jīng)過wifi傳輸,數(shù)據(jù)傳輸想用到restful。有沒有推薦的自帶的re
    發(fā)表于 03-22 18:12

    restful api設(shè)計規(guī)范

    做到Hypermedia,即返回結(jié)果中提供鏈接,連向其他API方法,使得用戶不查文檔,也知道下一步應(yīng)該做什么。以上是Restful API設(shè)計應(yīng)遵循的十大規(guī)范,除此之外,Restful API還需注意身份認證應(yīng)該使用OAuth 2.0框架,
    發(fā)表于 03-26 16:26

    什么是restful以及restfulAPI的設(shè)計風(fēng)格?

    如何理解restful架構(gòu)?什么是restful API ? restful API的設(shè)計風(fēng)格和序列化?restful API之請求與響應(yīng) ?
    發(fā)表于 11-04 08:25

    如何移植web服務(wù)器呢

    ,如何設(shè)計后端,之間怎么交互…。網(wǎng)上資料云云,卻都一直挺溜在初級版本中。結(jié)合這幾年經(jīng)驗,后續(xù)文章逐步由淺入深介紹整個過程。先列目錄吧:web服務(wù)器boa的移植基本的web知識cgi交互
    發(fā)表于 11-08 06:41

    在4.3.1版的restful_server示例中找不到npm是怎么回事?

    /../front/web-demo/dist doesn't exit.Please run 'npm run build' inC:/esp-431/ws431/restful_server/main
    發(fā)表于 02-17 07:31

    基于擴展VSM的Web服務(wù)發(fā)現(xiàn)

    在擴展空間向量模型(VSM)的基礎(chǔ)上設(shè)計并實現(xiàn)了一種Web服務(wù)發(fā)現(xiàn)機制。該機制結(jié)合Web服務(wù)語法和結(jié)構(gòu)信息,利用相似度計算實現(xiàn)Web
    發(fā)表于 04-20 08:49 ?27次下載

    基于QoS控制技術(shù)的Web服務(wù)合成

    現(xiàn)有的Web 服務(wù)合成技術(shù)很少考慮到QoS 的控制,所以不能滿足Web 服務(wù)合成動態(tài)的要求。本文結(jié)合當(dāng)前Web
    發(fā)表于 08-24 11:57 ?4次下載

    使用IIS為Web內(nèi)容配置Web服務(wù)器權(quán)限

      本文分步介紹如何使用 Internet 信息服務(wù) (IIS) 5.0 授予對 Web 內(nèi)容的 Web 服務(wù)器權(quán)限。     您可以對
    發(fā)表于 08-26 15:33 ?17次下載

    Constrained RESTful Environments (CoRE) Link Format

    Constrained RESTful Environments (CoRE) link Format,受限的RESTful環(huán)境鏈路格式
    發(fā)表于 11-26 15:23 ?6次下載

    Web服務(wù)組合測試綜述

    隨著面向服務(wù)技術(shù)和云計算技術(shù)的不斷成熟,尤其是面向服務(wù)體系結(jié)構(gòu)SOA的不斷完善以及推廣,使得其主要內(nèi)容Web服務(wù)已經(jīng)被廣泛應(yīng)用.為了充分利用Web
    發(fā)表于 12-19 11:02 ?0次下載
    <b class='flag-5'>Web</b><b class='flag-5'>服務(wù)</b>組合測試綜述

    Web服務(wù)推薦SOA系統(tǒng)

    為解決Web服務(wù)決策過程中新增信息多且信息不精確的問題,提出一種基于Web服務(wù)推薦的面向服務(wù)體系
    發(fā)表于 02-24 14:59 ?0次下載
    <b class='flag-5'>Web</b><b class='flag-5'>服務(wù)</b>推薦SOA系統(tǒng)

    Web服務(wù)組合匹配框架研究

    在現(xiàn)有服務(wù)發(fā)現(xiàn)方法中,單一考慮原子服務(wù)服務(wù)組合的方式難以滿足用戶日益增長的需求。針對該問題,設(shè)計一個基于模型轉(zhuǎn)換的Web服務(wù)匹配框架。在
    發(fā)表于 03-05 13:35 ?0次下載
    <b class='flag-5'>Web</b><b class='flag-5'>服務(wù)</b>組合匹配框架研究

    ASP NET MVC和WEB與API的知識點總結(jié)

     一、理解WEB API:提供基于RESTful架構(gòu)的WEB服務(wù),通過HTTP請求方法(GET, PUT, POST, DELETE)映射到服務(wù)
    發(fā)表于 11-27 16:43 ?13次下載
    ASP NET MVC和<b class='flag-5'>WEB</b>與API的知識點總結(jié)

    構(gòu)建RESTful Web服務(wù)過程

    本指南將引導(dǎo)您完成使用 Spring 創(chuàng)建“Hello, World”RESTful Web 服務(wù)過程。
    的頭像 發(fā)表于 09-06 15:47 ?679次閱讀