spring传统xml配置okhttp3

本文介绍如何在Spring环境中集成OKHttp3,并提供了一个简单的示例。通过自定义构建类OkhttpBuilder,可以灵活地配置连接池和超时时间等参数。文章还展示了如何在Controller中注入并使用OkHttpClient进行HTTP请求。
摘要由CSDN通过智能技术生成

问题

后端服务需要使用http客户端请求其他服务支持,项目中需要将HttpClient换成OKhttp,为啥要换OKhttp?这里不讨论这两者之间的优缺点。这篇文章主要关注与Spring传统xml配置方式集成Okhttp。 之前写过的一篇关于OKhttp3中的cookies文章,转眼就一年的时间了,时间过得真快。

步骤

OkhttpBuilder.java

自定义封装okhttp的构建类。

package com.xxx;

import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;

import java.util.concurrent.TimeUnit;
/**
 * 自定义Ok http 构建类
 */
public class OkhttpBuilder {
private OkHttpClient.Builder builder = new OkHttpClient.Builder();

/**
 * 连接池
 */
private ConnectionPool connectionPool;

/**
 * 为新连接设置默认连接超时,单位毫秒
 */
private long connectTimeout = 10000;

/**
 * 构建客户端
 * @return okhttp client
 */
public OkHttpClient build(){
        if (connectionPool != null) {
                builder.connectionPool(connectionPool);
        }
        if (connectTimeout != 10000) {
                builder.connectTimeout(connectTimeout, TimeUnit.MILLISECONDS);
        }
        return builder.build();
}

public ConnectionPool getConnectionPool() {
        return connectionPool;
}

public void setConnectionPool(ConnectionPool connectionPool) {
        this.connectionPool = connectionPool;
}

public long getConnectTimeout() {
        return connectTimeout;
}

public void setConnectTimeout(long connectTimeout) {
        this.connectTimeout = connectTimeout;
}
}

spring.xml

spring管理okhttp client,以及okhttp的构建者和连接池。

<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
  	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  	http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	...
	<!-- okhttp3 client -->
	<bean id="okhttpConnectionPool" class="okhttp3.ConnectionPool"/>
	<bean id="builder" class="com.xxx.OkhttpBuilder">
		<property name="connectTimeout" value="100"/>
		<property name="connectionPool" ref="okhttpConnectionPool"/>
	</bean>

	<bean id="okhttpClient" class="okhttp3.OkHttpClient" factory-bean="builder" factory-method="build"/>
	...
</beans>

Controller

注入OKhttp client。

@Autowired
private OkHttpClient okhttpClient;

在控制器中使用:

Request request = new Request.Builder()
                  .url("https://www.google.com/ncr")
                  .addHeader("myheader", "hello header")
                  .get()
                  .build();
Response response = null;
try {
  response = okhttpClient.newCall(request).execute();
  response.body().string();

} catch (IOException e) {
  e.printStackTrace();
} finally {
  if(response != null) {
    response.close();
  }
}

**Note:**一定要在finally中关闭连接,释放资源。

感受

简单方便,上手容易。

参考: Spring XML-Based DI and Builder Pattern Spring FactoryBean应用 spring 集成 okhttp3 Class ConnectionPool

转载于:https://my.oschina.net/fxtxz2/blog/1828911

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值