SpringBoot實(shí)現(xiàn)HTTP調(diào)用的7 種方式
本文主要介紹了SpringBoot實(shí)現(xiàn)HTTP調(diào)用的7 種方式,具體如下:

1. HttpClient
HttpClient是Apache基金會(huì)提供的一個(gè)用于發(fā)送HTTP請(qǐng)求的Java客戶端庫(kù)。
盡管它功能強(qiáng)大,但由于其API設(shè)計(jì)較為復(fù)雜且包體積龐大,在一些輕量級(jí)的應(yīng)用場(chǎng)景中可能顯得過于臃腫。
不過,在需要高度定制化的HTTP請(qǐng)求時(shí),HttpClient依然是一個(gè)不錯(cuò)的選擇。
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
publicclassHttpClientUtil {
publicstatic String get(String url)throws Exception {
CloseableHttpClienthttpClient= HttpClients.createDefault();
RequestConfigconfig= RequestConfig.custom()
.setConnectTimeout(12000)
.setConnectionRequestTimeout(12000)
.setSocketTimeout(12000)
.build();
HttpGetrequest=newHttpGet(url);
request.setConfig(config);
try (CloseableHttpResponseresponse= httpClient.execute(request)) {
// 處理響應(yīng)
return"Response received";
} catch (Exception e) {
thrownewRuntimeException("HTTP調(diào)用失敗", e);
}
}
}
2. OkHttp
OkHttp是一個(gè)現(xiàn)代化的HTTP客戶端,它提供了簡(jiǎn)潔且高效的API。
相比HttpClient,OkHttp更加輕量級(jí)且易于使用。
OkHttp支持同步和異步請(qǐng)求,并提供了連接池、GZIP壓縮和緩存等高級(jí)功能。
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
publicclassOkHttpUtil {
privatestaticfinalOkHttpClientCLIENT=newOkHttpClient();
publicstatic String get(String url)throws Exception {
Requestrequest=newRequest.Builder()
.url(url)
.build();
try (Responseresponse= CLIENT.newCall(request).execute()) {
// 處理響應(yīng)
return response.body().string();
}
}
}
3. OkHttpUtil(封裝版)
為了簡(jiǎn)化OkHttp的使用,我們可以對(duì)其進(jìn)行封裝,提供一個(gè)更加友好的API接口。
OkHttpUtil封裝版就是這樣一個(gè)工具類,它使得HTTP請(qǐng)求變得異常簡(jiǎn)單。
// 假設(shè)已經(jīng)有了一個(gè)封裝好的OkHttpUtil類
public class OkHttpUtilWrapper {
public static String get(String url, Map<String, Object> queryParams) throws IOException {
// 假設(shè)OkHttpUtil提供了這樣的get方法
return OkHttpUtil.get(url, queryParams);
}
}
4. Jodd HTTP
Jodd HTTP是另一個(gè)輕量級(jí)的HTTP客戶端庫(kù),它提供了簡(jiǎn)潔的API和高效的性能。
Jodd HTTP支持各種HTTP方法、請(qǐng)求頭、查詢參數(shù)和表單數(shù)據(jù)等,非常適合快速構(gòu)建HTTP請(qǐng)求。
import jodd.http.HttpRequest;
import jodd.http.HttpResponse;
publicclassJoddHttpUtil {
publicstatic String get(String url, Map<String, Object> queryParams)throws IOException {
HttpRequestrequest= HttpRequest.get(url).query(queryParams);
HttpResponseresponse= request.send();
return response.bodyText();
}
}
5. Hutool HTTP
Hutool是一個(gè)Java工具類庫(kù),其中包含了豐富的HTTP工具類。
Hutool HTTP提供了簡(jiǎn)潔且強(qiáng)大的HTTP請(qǐng)求功能,支持GET、POST、PUT、DELETE等多種HTTP方法,并內(nèi)置了連接池和重試機(jī)制。
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
publicclassHutoolHttpUtil {
publicstatic String get(String url, Map<String, Object> queryParams)throws IOException {
HttpRequestrequest= HttpUtil.createGet(url).form(queryParams);
HttpResponseresponse= request.execute();
return response.body();
}
}
6. RestTemplate
RestTemplate是Spring框架提供的一個(gè)同步HTTP客戶端工具,它簡(jiǎn)化了與HTTP服務(wù)的通信,并統(tǒng)一了異常處理。
RestTemplate支持RESTful風(fēng)格的URL模板和請(qǐng)求參數(shù)的綁定,非常適合與RESTful服務(wù)進(jìn)行交互。
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.ResponseEntity;
@Component
publicclassRestTemplateUtil {
privatefinal RestTemplate restTemplate;
publicRestTemplateUtil(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
public String get(String url, Map<String, Object> queryParams) {
Stringuri= buildUri(url, queryParams);
ResponseEntity<String> response = restTemplate.getForEntity(uri, String.class);
return response.getBody();
}
private String buildUri(String url, Map<String, Object> queryParams) {
// 構(gòu)建URI的邏輯
return url;
}
}
7. Forest
Forest是一個(gè)聲明式的HTTP客戶端框架,它允許開發(fā)者以接口的方式來定義HTTP請(qǐng)求。
Forest提供了簡(jiǎn)潔的API和強(qiáng)大的功能,如請(qǐng)求重試、超時(shí)設(shè)置、請(qǐng)求頭等,非常適合構(gòu)建復(fù)雜的HTTP請(qǐng)求場(chǎng)景。
# application.yml forest: max-connections: 1000 connect-timeout: 3000 read-timeout: 3000
import com.dtflys.forest.annotation.Get;
import com.dtflys.forest.annotation.Post;
import com.dtflys.forest.annotation.Query;
import com.dtflys.forest.annotation.Header;
import com.dtflys.forest.annotation.JSONBody;
import com.dtflys.forest.springboot.annotation.ForestScan;
import org.springframework.stereotype.Component;
@ForestScan(basePackages = "com.example.client")
@Component
public interface TestClient {
@Get("http://localhost:20001/test/queryById")
String queryById(@Header Map<String, Object> headerMap, @Query Map<String, Object> params);
@Post("http://localhost:20001/test/add")
String add(@Header Map<String, Object> headerMap, @JSONBody UserVo userVo);
}到此這篇關(guān)于SpringBoot實(shí)現(xiàn)HTTP調(diào)用的7 種方式的文章就介紹到這了,更多相關(guān)SpringBoot HTTP調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot單體架構(gòu)http請(qǐng)求轉(zhuǎn)換https請(qǐng)求來支持微信小程序調(diào)用接口
- Springboot?HTTP如何調(diào)用其他服務(wù)
- springboot+HttpInvoke?實(shí)現(xiàn)RPC調(diào)用的方法
- SpringBoot 項(xiàng)目使用hutool 工具進(jìn)行 http 接口調(diào)用的處理方法
- SpringBoot?Http遠(yuǎn)程調(diào)用的方法
- SpringBoot實(shí)現(xiàn)HTTP調(diào)用的七種方式總結(jié)
- 在SpringBoot中使用UniHttp簡(jiǎn)化天地圖路徑規(guī)劃調(diào)用實(shí)踐記錄(場(chǎng)景分析)
相關(guān)文章
Java中操作Xml使用方法備忘錄(Hutool工具類XmlUtil、XStream)
這篇文章主要給大家介紹了關(guān)于Java中操作Xml使用方法(Hutool工具類XmlUtil、XStream)的相關(guān)資料,XMLUtil是一個(gè)工具類,主要用于讀取XML配置文件并提供相應(yīng)的操作方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
Guava事件總線應(yīng)用場(chǎng)景最佳實(shí)踐
這篇文章主要為大家介紹了Guava事件總線應(yīng)用場(chǎng)景最佳實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
SpringSecurity在分布式環(huán)境下的使用流程分析
文章介紹了Spring?Security在分布式環(huán)境下的使用,包括單點(diǎn)登錄(SSO)的概念、流程圖以及JWT(JSON?Web?Token)的生成和校驗(yàn),通過使用JWT和RSA非對(duì)稱加密,可以實(shí)現(xiàn)安全的分布式認(rèn)證,感興趣的朋友一起看看吧2025-02-02
基于Spring Boot DevTools實(shí)現(xiàn)開發(fā)過程優(yōu)化
這篇文章主要介紹了基于Spring Boot DevTools實(shí)現(xiàn)開發(fā)過程優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot 并發(fā)登錄人數(shù)控制的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot 并發(fā)登錄人數(shù)控制的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
玩轉(zhuǎn)spring boot MVC應(yīng)用(2)
玩轉(zhuǎn)spring boot,如何快速搭建一個(gè)MCV程序?這篇文章為大家詳細(xì)主要介紹了一個(gè)MCV程序的快速搭建過程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Netty之使用DelimiterBasedFrameDecoder進(jìn)行消息分隔詳解
這篇文章主要介紹了Netty之使用DelimiterBasedFrameDecoder進(jìn)行消息分隔詳解,在使用Netty進(jìn)行TCP消息傳輸時(shí),為了上層協(xié)議能夠?qū)ο⒄_區(qū)分,避免粘包和拆包導(dǎo)致的問題,一般可以通過消息定長(zhǎng)、將回車換行符作為消息結(jié)束符,需要的朋友可以參考下2023-12-12
Mybatis如何使用動(dòng)態(tài)語句實(shí)現(xiàn)批量刪除(delete結(jié)合foreach)
這篇文章主要介紹了Mybatis如何使用動(dòng)態(tài)語句實(shí)現(xiàn)批量刪除(delete結(jié)合foreach),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03

