Spring Boot項目中調用第三方接口

目錄

步驟1: 添加依賴

步驟2: 配置HTTP客戶端

配置RestTemplate

配置WebClient

步驟3: 在Service層調用接口

使用RestTemplate示例

使用WebClient示例

步驟4: 在Controller層調用Service

注意事項

總結


Spring Boot項目中調用第三方接口

在Spring Boot項目中調用第三方接口(如RESTful API)是常見的需求,通常通過HTTP客戶端實現。Spring Boot提供了多種工具,如RestTemplate(同步)和WebClient(異步)。下面我將逐步解釋如何實現,確保回答真實可靠。整個過程包括添加依賴、配置客戶端、發送請求和處理響應。我將以調用一個簡單的GET接口為例。

步驟1: 添加依賴

首先,在項目的pom.xml文件中添加Spring Boot Starter Web依賴(如果使用RestTemplate)或Starter WebFlux依賴(如果使用WebClient)。以下是RestTemplate的依賴:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

如果選擇WebClient(推薦用于響應式編程),添加:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

步驟2: 配置HTTP客戶端

在Spring Boot中,你可以通過配置類定義Bean。以下是兩種方法的配置:

  • 使用RestTemplate(同步):適合簡單請求。
  • 使用WebClient(異步):適合高并發場景,支持非阻塞IO。
配置RestTemplate

創建一個配置類,定義RestTemplate Bean:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class AppConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}

配置WebClient

創建一個配置類,定義WebClient Bean:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;@Configuration
public class AppConfig {@Beanpublic WebClient webClient() {return WebClient.create();}
}

步驟3: 在Service層調用接口

創建一個Service類,注入HTTP客戶端,并編寫方法發送請求。以下示例調用一個假想的第三方API(URL:https://api.example.com/data),假設返回JSON數據。

使用RestTemplate示例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;@Service
public class ApiService {private final RestTemplate restTemplate;@Autowiredpublic ApiService(RestTemplate restTemplate) {this.restTemplate = restTemplate;}public String callThirdPartyApi() {String url = "https://api.example.com/data"; // 替換為實際接口URL// 發送GET請求,返回String類型(假設接口返回文本或JSON)return restTemplate.getForObject(url, String.class);}// 如果需要POST請求,示例:public String postData(String requestBody) {String url = "https://api.example.com/post";return restTemplate.postForObject(url, requestBody, String.class);}
}

使用WebClient示例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;@Service
public class ApiService {private final WebClient webClient;@Autowiredpublic ApiService(WebClient webClient) {this.webClient = webClient;}public Mono<String> callThirdPartyApi() {String url = "https://api.example.com/data"; // 替換為實際接口URL// 發送GET請求,返回Mono<String>(響應式編程)return webClient.get().uri(url).retrieve().bodyToMono(String.class);}// 如果需要POST請求,示例:public Mono<String> postData(String requestBody) {String url = "https://api.example.com/post";return webClient.post().uri(url).bodyValue(requestBody).retrieve().bodyToMono(String.class);}
}

步驟4: 在Controller層調用Service

創建一個Controller,注入Service并暴露API端點,供前端或其他服務調用。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ApiController {private final ApiService apiService;@Autowiredpublic ApiController(ApiService apiService) {this.apiService = apiService;}@GetMapping("/call-api")public String callApi() {// 使用RestTemplate版本return apiService.callThirdPartyApi();// 如果使用WebClient,需處理異步響應(例如:.block()或返回Mono)}
}

注意事項

  1. 錯誤處理:添加異常處理,例如使用try-catch塊捕獲RestClientExceptionWebClientResponseException
    • 示例:在Service方法中添加:
      try {return restTemplate.getForObject(url, String.class);
      } catch (RestClientException e) {throw new RuntimeException("調用接口失敗: " + e.getMessage());
      }
      

  2. 請求頭與參數:如果需要設置請求頭(如認證token),使用HttpHeaders
    • 對于RestTemplate:使用HttpEntity封裝頭和體。
    • 對于WebClient:使用.header()方法。
  3. 依賴管理:確保Spring Boot版本兼容(建議使用Spring Boot 2.x或3.x)。
  4. 測試:使用單元測試(如JUnit和Mockito)模擬HTTP調用。
  5. 性能:對于高負載應用,優先使用WebClient以避免線程阻塞。
  6. 第三方庫:如果接口復雜,考慮使用Feign(聲明式REST客戶端),添加spring-cloud-starter-openfeign依賴。

總結

在Spring Boot中調用第三方接口,核心步驟是添加依賴、配置客戶端Bean、在Service層發送請求。RestTemplate簡單易用,適合初學者;WebClient更現代,支持響應式編程。根據項目需求選擇,并始終添加錯誤處理和日志記錄。如果接口需要認證或復雜參數,參考Spring官方文檔進一步優化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918576.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918576.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918576.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關系型數據庫:原理、演進與生態全景——從理論基石到云原生的深度巡禮

目錄 一、引言&#xff1a;當“表”成為世界的通用語言 二、理論基石&#xff1a;關系模型與 ACID 三、引擎架構&#xff1a;一條 SQL 的奇幻漂流 四、存儲機制&#xff1a;頁、緩沖池與 WAL 五、并發控制&#xff1a;鎖、MVCC 與隔離級別 六、SQL&#xff1a;聲明式語言…

【軟考架構】計算機網絡中的IP地址表示和子網劃分

在計算機網絡中&#xff0c;IP地址用于唯一標識網絡中的設備。IP地址的表示方式有兩種&#xff1a;IPv4和IPv6。IPv4是當前使用最廣泛的地址格式&#xff0c;而IPv6是為了解決IPv4地址耗盡問題而設計的。 1. IPv4地址 IPv4地址是一個32位的數字&#xff0c;通常用四個十進制數表…

【后端】Spring @Resource和@Autowired的用法和區別

以下是關于 Resource 和 Autowired 兩個依賴注入注解的詳細對比說明&#xff0c;重點關注它們的區別和使用場景&#xff1a;&#x1f4cc; 核心區別總結特性Autowired (Spring)Resource (JSR-250 標準)來源Spring 框架原生注解Java 標準 (javax.annotation)默認注入方式按類型 …

php+apache+nginx 更換域名

phpapachenginx 更換域名? 第 1 步&#xff1a;確認到底是誰在監聽 80/443? 第 2 步&#xff1a;按監聽者修改配置&#x1f539; 場景 A&#xff1a;Apache 直接監聽 80/443&#x1f539; 場景 B&#xff1a;Nginx 監聽 80/443&#xff0c;反向代理到 Apache? 第 3 步&#…

AI 視頻衛士:AI 無人機巡檢,適配多元河道場景的治理利器

河道治理&#xff0c;場景各異&#xff0c;難題不同。城市內河的生活垃圾、景區河道的景觀破壞、工業園區河道的工業廢料&#xff0c;每一種場景都對巡檢工作有著獨特的要求。AI 視頻衛士&#xff0c;憑借強大的 AI 技術&#xff0c;針對不同河道應用場景&#xff0c;打造專屬巡…

累加和校驗原理與FPGA實現

累加和校驗原理與FPGA實現寫在前面一、基礎原理二、舉個例子2.1 進位累加2.2 回卷累加三、FPGA實現3.1 發送端&#xff08;產生校驗和&#xff09;3.2 接收端&#xff08;累加和校驗&#xff09;3.3 仿真結果寫在后面寫在前面 在上文《奇偶校驗原理與FPGA實現》中&#xff0c;講…

深入解析Go設計模式:命令模式實戰

什么是命令模式? 命令模式(Command Pattern)是一種行為型設計模式,它將請求封裝為獨立對象,從而允許客戶端通過不同的請求對象進行參數化配置。該模式支持請求的排隊執行、操作記錄以及撤銷等功能。 命令模式UML類圖如下所示: 命令模式包含五個核心角色,具體說明如下: …

Pytest項目_day11(fixture、conftest)

Fixture fixture是一種類似于setup、teardown&#xff0c;用于測試前后進行預備、清理工作的代碼處理機制 相比于setup、teardown來說&#xff0c;fixture命名更靈活&#xff0c;局限性更少使用conftest.py配置里面可以實現數據共享&#xff0c;不需要import就能自動找到一些配…

DAY 43 復習日

作業&#xff1a; kaggle找到一個圖像數據集&#xff0c;用cnn網絡進行訓練并且用grad-cam做可視化 劃分數據集 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader impo…

Flink運行時的實現細節

一、Flink集群中各角色運行架構先說Flink集群中的角色吧&#xff0c;有三個分別是客戶端(Client)、JobManager、TaskManager。客戶端負責接收作業任務并進行解析&#xff0c;將解析后的二進制數據發送給JobManager&#xff1b;JobManager是作業調度中心&#xff0c;負責對所有作…

思科、華為、華三如何切換三層端口?

三層交換機融合了二層交換技術與三層轉發技術&#xff0c;具備強大的網絡功能。主流廠商&#xff08;思科、H3C、華為&#xff09;的三層交換機均支持二層端口與三層端口的相互切換&#xff0c;但具體命令存在差異。本文將詳細介紹三大廠商設備的端口切換方法及相關知識。一、各…

springboot的基礎要點

Spring Boot 的核心設計理念是 ??"約定優于配置"??&#xff08;Convention Over Configuration&#xff09;&#xff0c;旨在簡化 Spring 應用的初始搭建和開發過程。以下是需要掌握的核心基礎要點&#xff1a;?一、核心機制??自動配置 (Auto-Configuration)?…

lesson36:MySQL從入門到精通:全面掌握數據庫操作與核心原理

目錄 一、引言&#xff1a;為什么選擇MySQL&#xff1f; 二、MySQL安裝與登錄配置 2.1 環境準備 2.2 登錄指令詳解 三、數據庫核心操作 3.1 數據庫生命周期管理 3.2 數據庫存儲引擎選擇 四、數據表設計與操作 4.1 表結構創建&#xff08;含數據類型詳解&#xff09; …

Spring源碼解析 - SpringApplication run流程-prepareContext源碼分析

prepareContext源碼分析 private void prepareContext(DefaultBootstrapContext bootstrapContext, ConfigurableApplicationContext context,ConfigurableEnvironment environment, SpringApplicationRunListeners listeners,ApplicationArguments applicationArguments, Bann…

HIS系統:醫院信息化建設的核心,采用Angular+Java技術棧,集成MySQL、Redis等技術,實現醫院全業務流程管理。

HIS系統在醫院信息化建設中扮演著核心的角色。它是一個綜合性的信息系統&#xff0c;旨在管理和運營醫院的各種業務&#xff0c;包括門診、住院、財務、物資、科研等。技術細節&#xff1a;前端&#xff1a;AngularNginx后臺&#xff1a;JavaSpring&#xff0c;SpringBoot&…

深度學習-卷積神經網絡-LeNet

卷積神經網絡是一種專門用于處理具有網格結構數據&#xff08;如圖像、音頻等&#xff09;的深度學習模型。它通過卷積層自動提取數據中的特征&#xff0c;利用局部連接和參數共享的特性減少了模型的參數數量&#xff0c;降低了過擬合的風險&#xff0c;同時能夠有效地捕捉數據…

【Java項目與數據庫、Maven的關系詳解】

Java項目與數據庫、Maven的關系詳解 一、Java項目是否都需要連接本地數據庫&#xff1f; 不一定&#xff0c;這取決于項目類型和需求&#xff1a; 1. 需要數據庫的項目類型項目類型數據庫作用典型場景Web應用存儲用戶數據/業務數據電商系統、CMS服務端程序持久化數據金融交易系…

兩個Maven工程,使用idea開發,工程A中依賴了工程B,改了工程B,工程A如何獲取最新代碼

兩個Maven工程&#xff0c;使用idea開發&#xff0c;工程A中依賴了工程B&#xff0c;改了工程B&#xff0c;工程A如何獲取最新代碼 如果工程B的版本是快照&#xff0c;那么如下。 步驟一 工程B 執行 clean package install deploy 步驟二 工程A 刷新Maven

奧比中光與地平線、地瓜機器人達成戰略合作,攜手推動機器人智能化

摘要&#xff1a;機器人“慧眼”與“智腦”強強聯合&#xff01;8月11日&#xff0c;奧比中光與地平線及其控股子公司地瓜機器人在北京簽訂合作協議&#xff0c;雙方將在機器人智能化領域展開深度合作&#xff0c;充分發揮各自的技術與產品優勢&#xff0c;攜手推動機器人產業的…

【Linux】Tomcat

Tomcat簡介Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器&#xff0c;屬于輕量級應用服務器&#xff0c;在中小型系統和 并發訪問用戶不是很多的場合下被普遍使用&#xff0c;Tomcat 具有處理HTML頁面的功能&#xff0c;它還是一個Servlet和 JSP容器Tomcat的使用安裝ja…