springboot中使用okhttp3的小结

 更新时间:2025年09月12日 09:29:14   作者:hero.fei  
OkHttp3是一个Java HTTP客户端,可以处理各种请求类型,比如 GET、POST、PUT 等,并且支持高效的 HTTP 连接池、请求和响应缓存、以及异步请求处理等,感兴趣的可以了解一下

在 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
    @Bean
    public 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 {

    @Autowired
    private 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 {

    @Autowired
    private 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() {
            @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());
                }
            }
        });
    }
}

到此这篇关于springboot中使用okhttp3的小结的文章就介绍到这了,更多相关springboot使用okhttp3内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于SpringBoot使用Tika实现文档解析

    基于SpringBoot使用Tika实现文档解析

    Apache Tika是开源内容分析工具,支持多格式文本提取与元数据解析,具备语言检测和MIME类型识别功能,适用于搜索引擎、数据分析等场景,在SpringBoot中集成需注意性能及配置问题,支持流式处理和自定义扩展,下面介绍SpringBoot使用Tika实现文档解析,感兴趣的朋友一起看看吧
    2025-07-07
  • 关于Spring中@Transactional事务回滚的注意事项

    关于Spring中@Transactional事务回滚的注意事项

    这篇文章主要介绍了关于Spring中@Transactional事务回滚的注意事项,回滚(Rollback)指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。回滚包括程序回滚和数据回滚等类型,需要的朋友可以参考下
    2023-05-05
  • Java对zip,rar,7z文件带密码解压实例详解

    Java对zip,rar,7z文件带密码解压实例详解

    在日常业务中,会遇到一些琐碎文件需要打包到一个压缩包中上传,业务方在后台接收到压缩包后自行解压,然后解析相应文件。而且可能涉及安全保密,因此会在压缩时带上密码,要求后台业务可以指定密码进行解压。本文将用Java解决这一问题,需要的可以参考一下
    2022-07-07
  • java线程池中线程数量到底是几

    java线程池中线程数量到底是几

    本文主要介绍了java线程池中线程数量到底是几,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 详解利用spring-security解决CSRF问题

    详解利用spring-security解决CSRF问题

    这篇文章主要介绍了详解利用spring-security解决CSRF问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • oracle+mybatis-plus+springboot实现分页查询的实例

    oracle+mybatis-plus+springboot实现分页查询的实例

    本文主要介绍了oracle+mybatis-plus+springboot实现分页查询,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot居然有44种应用启动器,你都知道吗

    SpringBoot居然有44种应用启动器,你都知道吗

    很多人都不知道SpringBoot应用启动器竟然有44个,本文就一起来介绍一下,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-01-01
  • JavaWeb验证码校验功能代码实例

    JavaWeb验证码校验功能代码实例

    这篇文章主要介绍了JavaWeb验证码校验功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java对int[]数组做新增删除去重操作代码

    Java对int[]数组做新增删除去重操作代码

    这篇文章主要介绍了Java里面对int[]数组做新增删除去重实现,这里记录下使用int[]数组对数组进行新增删除去重等操作,用来更加了解java里面的集合类思想,需要的朋友可以参考下
    2023-10-10
  • 详解SpringBoot中自定义和配置拦截器的方法

    详解SpringBoot中自定义和配置拦截器的方法

    今天这篇文章来介绍一下拦截器在SpringBoot中的如何自定义及如何配置的,拦截器的具体作用和应用场景,感兴趣的小伙伴可以了解一下
    2022-05-05

最新评论