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

1. HttpClient
HttpClient是Apache基金會提供的一個用于發(fā)送HTTP請求的Java客戶端庫。
盡管它功能強大,但由于其API設(shè)計較為復(fù)雜且包體積龐大,在一些輕量級的應(yīng)用場景中可能顯得過于臃腫。
不過,在需要高度定制化的HTTP請求時,HttpClient依然是一個不錯的選擇。
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是一個現(xiàn)代化的HTTP客戶端,它提供了簡潔且高效的API。
相比HttpClient,OkHttp更加輕量級且易于使用。
OkHttp支持同步和異步請求,并提供了連接池、GZIP壓縮和緩存等高級功能。
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(封裝版)
為了簡化OkHttp的使用,我們可以對其進行封裝,提供一個更加友好的API接口。
OkHttpUtil封裝版就是這樣一個工具類,它使得HTTP請求變得異常簡單。
// 假設(shè)已經(jīng)有了一個封裝好的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是另一個輕量級的HTTP客戶端庫,它提供了簡潔的API和高效的性能。
Jodd HTTP支持各種HTTP方法、請求頭、查詢參數(shù)和表單數(shù)據(jù)等,非常適合快速構(gòu)建HTTP請求。
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是一個Java工具類庫,其中包含了豐富的HTTP工具類。
Hutool HTTP提供了簡潔且強大的HTTP請求功能,支持GET、POST、PUT、DELETE等多種HTTP方法,并內(nèi)置了連接池和重試機制。
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框架提供的一個同步HTTP客戶端工具,它簡化了與HTTP服務(wù)的通信,并統(tǒng)一了異常處理。
RestTemplate支持RESTful風(fēng)格的URL模板和請求參數(shù)的綁定,非常適合與RESTful服務(wù)進行交互。
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是一個聲明式的HTTP客戶端框架,它允許開發(fā)者以接口的方式來定義HTTP請求。
Forest提供了簡潔的API和強大的功能,如請求重試、超時設(shè)置、請求頭等,非常適合構(gòu)建復(fù)雜的HTTP請求場景。
# 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實現(xiàn)HTTP調(diào)用的7 種方式的文章就介紹到這了,更多相關(guān)SpringBoot HTTP調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot單體架構(gòu)http請求轉(zhuǎn)換https請求來支持微信小程序調(diào)用接口
- Springboot?HTTP如何調(diào)用其他服務(wù)
- springboot+HttpInvoke?實現(xiàn)RPC調(diào)用的方法
- SpringBoot 項目使用hutool 工具進行 http 接口調(diào)用的處理方法
- SpringBoot?Http遠程調(diào)用的方法
- SpringBoot實現(xiàn)HTTP調(diào)用的七種方式總結(jié)
- 在SpringBoot中使用UniHttp簡化天地圖路徑規(guī)劃調(diào)用實踐記錄(場景分析)
相關(guān)文章
使用MyBatis-Plus實現(xiàn)聯(lián)表查詢分頁的示例代碼
本文主要講述了如何在SpringBoot項目中使用MyBatis-Plus的分頁插件,通過這個示例,可以學(xué)會如何利用MyBatis-Plus進行高效的分頁查詢,感興趣的可以了解一下2024-10-10
SpringBoot整合Mybatis-plus實現(xiàn)多級評論功能
本文介紹了如何使用SpringBoot整合Mybatis-plus實現(xiàn)多級評論功能,同時提供了數(shù)據(jù)庫的設(shè)計和詳細的后端代碼,前端界面使用的Vue2,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-05-05
Mybatis-plus如何查詢表中指定字段(不查詢?nèi)孔侄?
這篇文章主要介紹了Mybatis-plus如何查詢表中指定字段(不查詢?nèi)孔侄?,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
SpringBoot @Value注解支持配置自動刷新能力擴展方式
本文介紹了如何通過自定義注解和BeanPostProcessor實現(xiàn)SpringBoot中@Value注解的配置自動刷新能力,主要步驟包括:定義一個支持動態(tài)刷新的注解,實現(xiàn)配置的動態(tài)變更,以及通過BeanPostProcessor掃描并刷新使用@Value注解的變量2024-12-12
解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system
今天小編就為大家分享一篇關(guān)于解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system的異常問題,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
阿里資深技術(shù)專家:在各階段中3年經(jīng)驗的java程序員應(yīng)該具備哪些技術(shù)能力
這篇文章主要介紹了阿里資深技術(shù)專家:在各階段中3年經(jīng)驗的java程序員應(yīng)該具備哪些技術(shù)能力,本文給大家列舉了一些內(nèi)容,大家可以根據(jù)自己需要有方法的掌握,感興趣的朋友跟隨小編一起看看吧2020-07-07

