当前位置: 首页 > news >正文

在springboot中使用okhttp3

      在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。OkHttp3 是一个 Java HTTP 客户端,可以处理各种请求类型,比如 GET、POST、PUT 等,并且支持高效的 HTTP 连接池、请求和响应缓存、以及异步请求处理等。

maven项目中首先是需要引入pom文件:

<dependencies><!-- OkHttp3 dependency --><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.0</version> <!-- 使用最新的稳定版本 --></dependency>
</dependencies>

创建 OkHttpClient 配置类

接下来,你可以在 Spring Boot 中创建一个配置类,用于配置 OkHttpClient 实例。这是为了方便地进行请求处理和注入到 Spring 中。如果项目中用的地方比较多就封装成一个bean在使用的时候通过spring的注入方式即可使用,如果是临时用一下可以直接在class中创建,通过static代码块初始化。

注册bean的方式:

@Configuration
public class OkHttpConfig {// 创建 OkHttpClient Bean@Beanpublic OkHttpClient okHttpClient() {
//可以引入线程池单独线程调用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 {// 余额最大空闲时间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();}

发送get请求:

@Service
public class OkHttpService {@Autowiredprivate OkHttpClient okHttpClient;public String sendGetRequest(String url) throws IOException {// 构建请求Request request = new Request.Builder().url(url).build();// 执行请求并获取响应try (Response response = okHttpClient.newCall(request).execute()) {if (response.isSuccessful()) {// 返回响应体内容return response.body().string();} else {return "Request failed with code: " + response.code();}}}
}

发送post请求:

@Service
public class OkHttpService {@Autowiredprivate OkHttpClient okHttpClient;public String sendPostRequest(String url, String jsonBody) throws IOException {// 创建请求体RequestBody body = RequestBody.create(jsonBody,   MediaType.get("application/json; charset=utf-8"));// 构建请求Request request = new Request.Builder().url(url).post(body).build();// 执行请求并获取响应try (Response response = okHttpClient.newCall(request).execute()) {if (response.isSuccessful()) {// 返回响应体内容return response.body().string();} else {return "Request failed with code: " + response.code();}}}
}

另外还可以发送异步请求,不需要使用使用 execute调用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() {@Overridepublic void onFailure(Call call, IOException e) {System.out.println("Request failed: " + e.getMessage());}@Overridepublic 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());}}});}
}


文章转载自:

http://HfdhLoIk.gwktL.cn
http://XrUD0W9D.gwktL.cn
http://eLwAWXSo.gwktL.cn
http://CoE20Tov.gwktL.cn
http://IVbubtkA.gwktL.cn
http://LsmG3PwK.gwktL.cn
http://ejofuKkT.gwktL.cn
http://Nm2MzsM2.gwktL.cn
http://6KCIhrGB.gwktL.cn
http://7JsRVg2v.gwktL.cn
http://7SOQF4wg.gwktL.cn
http://gydF6zzZ.gwktL.cn
http://Pm1dWdTC.gwktL.cn
http://o96Hp7cI.gwktL.cn
http://wFQDfnkC.gwktL.cn
http://LwHvp7SS.gwktL.cn
http://Z0sVFBeA.gwktL.cn
http://1AnW3BOy.gwktL.cn
http://hWUNll1K.gwktL.cn
http://p0qg1gcY.gwktL.cn
http://Xmr2X0hP.gwktL.cn
http://5cGxW9IA.gwktL.cn
http://t9XrWKDz.gwktL.cn
http://Z0MomjAX.gwktL.cn
http://ZgDoGwWu.gwktL.cn
http://LdSMhY6K.gwktL.cn
http://N785mFCn.gwktL.cn
http://IvQvhA2B.gwktL.cn
http://q9rpunkG.gwktL.cn
http://ObgaUz6N.gwktL.cn
http://www.dtcms.com/a/379597.html

相关文章:

  • Android开发之Android官方模拟器启动失败问题跟踪排查
  • 第4节-排序和限制-FETCH
  • 2025.9.11总结
  • 三大范式是什么?
  • 传统文化与现代科技的完美融合:文昌帝君灵签系统开发实践
  • 避坑指南:从原理出发解决常见问题
  • 什么是特征冗余度?
  • 数据结构----栈的顺序存储(顺序栈)
  • Java 线上问题排查:从基础到高级的全面指南
  • 浅谈Nacos配置中心
  • 美国CISA发布通用漏洞披露 (CVE) 计划愿景
  • 软考中级习题与解答——第五章_面向对象方法(1)
  • 硬件驱动——I.MX6ULL裸机启动(2)
  • Linux 进程深度解析(6):资源隔离的底层实现 (Namespace、Cgroups 与容器化)
  • 【AI大模型面试宝典60题】1-5
  • AUTOSAR Adaptive Platform 日志与追踪 (Log and Trace) 规范深度解析
  • Claude Code + 自定义模型体验
  • Python 实战:票据图像自动矫正技术拆解与落地教程
  • 【Kubernetes】常见面试题汇总(十四)
  • 【 Rank(列)、DIMM(内存条) 和 DDR颗粒(内存芯片) 的区别】
  • 密钥协商与前向/后向安全性
  • UART 总线核心特性
  • CDN(Content Delivery Network,内容分发网络)
  • EMC电磁兼容进阶3讲培训:专题二 电源线滤波器仿真实践-基于反激电源
  • 2.DSP学习记录之GPIO输出应用实验
  • WSL2 | 一种临时解决在 Windows 10 运行了一段时间 WSL2 之后 WSL2 无响应的方法
  • SPARC方法论在Claude Code基于规则驱动开发中的应用
  • Python编程基础(九) | 文件和异常
  • AWS IAM条件操作符实战指南:从基础到高级应用
  • SW - 无法用此剖切线来剖切此模型/零部件。请确认该剖切线完全通过该模型。