springboot中使用okhttp3的小結(jié)
在 Spring Boot 項(xiàng)目中使用 OkHttp3 進(jìn)行 HTTP 請(qǐng)求是一個(gè)高效且流行的方式。OkHttp3 是一個(gè) Java HTTP 客戶端,可以處理各種請(qǐng)求類型,比如 GET、POST、PUT 等,并且支持高效的 HTTP 連接池、請(qǐng)求和響應(yīng)緩存、以及異步請(qǐng)求處理等。
maven項(xiàng)目中首先是需要引入pom文件:
<dependencies>
<!-- OkHttp3 dependency -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version> <!-- 使用最新的穩(wěn)定版本 -->
</dependency>
</dependencies>
創(chuàng)建OkHttpClient配置類
接下來(lái),你可以在 Spring Boot 中創(chuàng)建一個(gè)配置類,用于配置 OkHttpClient 實(shí)例。這是為了方便地進(jìn)行請(qǐng)求處理和注入到 Spring 中。如果項(xiàng)目中用的地方比較多就封裝成一個(gè)bean在使用的時(shí)候通過(guò)spring的注入方式即可使用,如果是臨時(shí)用一下可以直接在class中創(chuàng)建,通過(guò)static代碼塊初始化。
注冊(cè)bean的方式:
@Configuration
public class OkHttpConfig {
// 創(chuàng)建 OkHttpClient Bean
@Bean
public OkHttpClient okHttpClient() {
//可以引入線程池單獨(dú)線程調(diào)用
CONNECTION_POOL = new ConnectionPool(1024, 5, TimeUnit.MINUTES);
OK_HTTP_CLIENT = new OkHttpClient.Builder()
.connectionPool(CONNECTION_POOL)
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(1, TimeUnit.MINUTES)
.retryOnConnectionFailure(true)
.pingInterval(Duration.ofSeconds(59))
.build();
}
}在class類中直接使用:
@Slf4j
@Service
public class http3Test {
// 余額最大空閑時(shí)間
private final static int idleTime = 60 * 60 * 24;
private static final OkHttpClient OK_HTTP_CLIENT;
private static final ConnectionPool CONNECTION_POOL;
static {
CONNECTION_POOL = new ConnectionPool(1024, 5, TimeUnit.MINUTES);
OK_HTTP_CLIENT = new OkHttpClient.Builder()
.connectionPool(CONNECTION_POOL)
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(1, TimeUnit.MINUTES)
.retryOnConnectionFailure(true)
.pingInterval(Duration.ofSeconds(59))
.build();
}發(fā)送get請(qǐng)求:
@Service
public class OkHttpService {
@Autowired
private OkHttpClient okHttpClient;
public String sendGetRequest(String url) throws IOException {
// 構(gòu)建請(qǐng)求
Request request = new Request.Builder()
.url(url)
.build();
// 執(zhí)行請(qǐng)求并獲取響應(yīng)
try (Response response = okHttpClient.newCall(request).execute()) {
if (response.isSuccessful()) {
// 返回響應(yīng)體內(nèi)容
return response.body().string();
} else {
return "Request failed with code: " + response.code();
}
}
}
}發(fā)送post請(qǐng)求:
@Service
public class OkHttpService {
@Autowired
private OkHttpClient okHttpClient;
public String sendPostRequest(String url, String jsonBody) throws IOException {
// 創(chuàng)建請(qǐng)求體
RequestBody body = RequestBody.create(jsonBody, MediaType.get("application/json; charset=utf-8"));
// 構(gòu)建請(qǐng)求
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
// 執(zhí)行請(qǐng)求并獲取響應(yīng)
try (Response response = okHttpClient.newCall(request).execute()) {
if (response.isSuccessful()) {
// 返回響應(yīng)體內(nèi)容
return response.body().string();
} else {
return "Request failed with code: " + response.code();
}
}
}
}另外還可以發(fā)送異步請(qǐng)求,不需要使用使用 execute調(diào)用http3提供的enqueue方法:
import okhttp3.*;
public class AsyncOkHttpService {
private OkHttpClient okHttpClient = new OkHttpClient();
public void sendAsyncGetRequest(String url) {
Request request = new Request.Builder().url(url).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
System.out.println("Request failed: " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
System.out.println("Response: " + response.body().string());
} else {
System.out.println("Request failed with code: " + response.code());
}
}
});
}
}
到此這篇關(guān)于springboot中使用okhttp3的小結(jié)的文章就介紹到這了,更多相關(guān)springboot使用okhttp3內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于SpringBoot使用Tika實(shí)現(xiàn)文檔解析
Apache?Tika是開源內(nèi)容分析工具,支持多格式文本提取與元數(shù)據(jù)解析,具備語(yǔ)言檢測(cè)和MIME類型識(shí)別功能,適用于搜索引擎、數(shù)據(jù)分析等場(chǎng)景,在SpringBoot中集成需注意性能及配置問(wèn)題,支持流式處理和自定義擴(kuò)展,下面介紹SpringBoot使用Tika實(shí)現(xiàn)文檔解析,感興趣的朋友一起看看吧2025-07-07
關(guān)于Spring中@Transactional事務(wù)回滾的注意事項(xiàng)
這篇文章主要介紹了關(guān)于Spring中@Transactional事務(wù)回滾的注意事項(xiàng),回滾(Rollback)指的是程序或數(shù)據(jù)處理錯(cuò)誤,將程序或數(shù)據(jù)恢復(fù)到上一次正確狀態(tài)的行為?;貪L包括程序回滾和數(shù)據(jù)回滾等類型,需要的朋友可以參考下2023-05-05
Java對(duì)zip,rar,7z文件帶密碼解壓實(shí)例詳解
在日常業(yè)務(wù)中,會(huì)遇到一些瑣碎文件需要打包到一個(gè)壓縮包中上傳,業(yè)務(wù)方在后臺(tái)接收到壓縮包后自行解壓,然后解析相應(yīng)文件。而且可能涉及安全保密,因此會(huì)在壓縮時(shí)帶上密碼,要求后臺(tái)業(yè)務(wù)可以指定密碼進(jìn)行解壓。本文將用Java解決這一問(wèn)題,需要的可以參考一下2022-07-07
詳解利用spring-security解決CSRF問(wèn)題
這篇文章主要介紹了詳解利用spring-security解決CSRF問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
oracle+mybatis-plus+springboot實(shí)現(xiàn)分頁(yè)查詢的實(shí)例
本文主要介紹了oracle+mybatis-plus+springboot實(shí)現(xiàn)分頁(yè)查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
SpringBoot居然有44種應(yīng)用啟動(dòng)器,你都知道嗎
很多人都不知道SpringBoot應(yīng)用啟動(dòng)器竟然有44個(gè),本文就一起來(lái)介紹一下,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
JavaWeb驗(yàn)證碼校驗(yàn)功能代碼實(shí)例
這篇文章主要介紹了JavaWeb驗(yàn)證碼校驗(yàn)功能代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java對(duì)int[]數(shù)組做新增刪除去重操作代碼
這篇文章主要介紹了Java里面對(duì)int[]數(shù)組做新增刪除去重實(shí)現(xiàn),這里記錄下使用int[]數(shù)組對(duì)數(shù)組進(jìn)行新增刪除去重等操作,用來(lái)更加了解java里面的集合類思想,需要的朋友可以參考下2023-10-10

