spring整合httpClient工具类
2016-10-28 22:07
197 查看
本文整合基于httpclient目前最新版本4.5.1
首先加入httpclient的依赖
接下来spring-http的配置文件:
httpclient.properties的配置文件:
httpclient封装的工具类:
http执行post请求返回的封装类:
转自https://my.oschina.net/kkrgwbj/blog/671219
首先加入httpclient的依赖
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.1</version> </dependency>
接下来spring-http的配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--定义连接管理器--> <bean id="connectionManager" class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager" destroy-method="close"> <!-- 最大连接数 --> <property name="maxTotal" value="${http.maxTotal}"/> <!--设置每个主机最大的并发数--> <property name="defaultMaxPerRoute" value="${http.defaultMaxPerRoute}"/> </bean> <!--定义HttpClient构建器--> <bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder" factory-method="create"> <property name="connectionManager" ref="connectionManager"/> </bean> <!--定义httpClient对象,该bean一定是多例的--> <bean id="httpClient" class="org.apache.http.impl.client.CloseableHttpClient" factory-bean="httpClientBuilder" factory-method="build" scope="prototype"></bean> <!--定义requestConfig构建器--> <bean id="requestConfigBuilder" class="org.apache.http.client.config.RequestConfig.Builder"> <!--设置创建连接的最长时间--> <property name="connectTimeout" value="${http.connectTimeout}"/> <!--从连接池中获取到连接的最长时间--> <property name="connectionRequestTimeout" value="${http.connectionRequestTimeout}"/> <!--数据传输的最长时间--> <property name="socketTimeout" value="${http.socketTimeout}"/> </bean> <!--请求参数对象--> <bean class="org.apache.http.client.config.RequestConfig" factory-bean="requestConfigBuilder" factory-method="build"></bean> <!--定期清理无效连接--> <bean class="org.apache.http.impl.client.IdleConnectionEvictor" destroy-method="shutdown"> <constructor-arg index="0" ref="connectionManager"/> <constructor-arg index="1" value="${http.maxIdleTime}"/> <constructor-arg index="2" value="MINUTES"/> </bean> </beans>
httpclient.properties的配置文件:
#设置连接总数 http.maxTotal=500 #设置每个主机最大的并发数 http.defaultMaxPerRoute=100 #设置创建连接的最长时间 http.connectTimeout=2000 #从连接池中获取到连接的最长时间 http.connectionRequestTimeout=500 #数据传输的最长时间 http.socketTimeout=6000 #空闲时间(用于定期清理空闲连接) http.maxIdleTime = 1
httpclient封装的工具类:
@Service public class ApiService { @Autowired private CloseableHttpClient httpClient; @Autowired private RequestConfig requestConfig; /** * 执行get请求,200返回响应内容,其他状态码返回null * * @param url * @return * @throws IOException */ public String doGet(String url) throws IOException { //创建httpClient对象 CloseableHttpResponse response = null; HttpGet httpGet = new HttpGet(url); //设置请求参数 httpGet.setConfig(requestConfig); try { //执行请求 response = httpClient.execute(httpGet); //判断返回状态码是否为200 if (response.getStatusLine().getStatusCode() == 200) { return EntityUtils.toString(response.getEntity(), "UTF-8"); } } finally { if (response != null) { response.close(); } } return null; } /** * 执行带有参数的get请求 * * @param url * @param paramMap * @return * @throws IOException * @throws URISyntaxException */ public String doGet(String url, Map<String, String> paramMap) throws IOException, URISyntaxException { URIBuilder builder = new URIBuilder(url); for (String s : paramMap.keySet()) { builder.addParameter(s, paramMap.get(s)); } return doGet(builder.build().toString()); } /** * 执行post请求 * * @param url * @param paramMap * @return * @throws IOException */ public HttpResult doPost(String url, Map<String, String> paramMap) throws IOException { HttpPost httpPost = new HttpPost(url); //设置请求参数 httpPost.setConfig(requestConfig); if (paramMap != null) { List<NameValuePair> parameters = new ArrayList<NameValuePair>(); for (String s : paramMap.keySet()) { parameters.add(new BasicNameValuePair(s, paramMap.get(s))); } //构建一个form表单式的实体 UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters, Charset.forName("UTF-8")); //将请求实体放入到httpPost中 httpPost.setEntity(formEntity); } //创建httpClient对象 CloseableHttpResponse response = null; try { //执行请求 response = httpClient.execute(httpPost); return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(response.getEntity())); } finally { if (response != null) { response.close(); } } } /** * 执行post请求 * * @param url * @return * @throws IOException */ public HttpResult doPost(String url) throws IOException { return doPost(url, null); } /** * 提交json数据 * * @param url * @param json * @return * @throws ClientProtocolException * @throws IOException */ public HttpResult doPostJson(String url, String json) throws ClientProtocolException, IOException { // 创建http POST请求 HttpPost httpPost = new HttpPost(url); httpPost.setConfig(this.requestConfig); if (json != null) { // 构造一个请求实体 StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON); // 将请求实体设置到httpPost对象中 httpPost.setEntity(stringEntity); } CloseableHttpResponse response = null; try { // 执行请求 response = this.httpClient.execute(httpPost); return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(response.getEntity(), "UTF-8")); } finally { if (response != null) { response.close(); } } } }
http执行post请求返回的封装类:
public class HttpResult { private Integer code; private String data; public HttpResult(Integer code, String data) { this.code = code; this.data = data; } public HttpResult() { } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getData() { return data; } public void setData(String data) { this.data = data; } }
转自https://my.oschina.net/kkrgwbj/blog/671219
相关文章推荐
- redis整合spring(redisTemplate工具类)
- redis整合spring(redisTemplate工具类)
- Java Spring整合Redis工具类
- spring-boot + jpa + jsp 整合shiro + 各种工具类 + Hplus前端框架
- Redis使用二、redis整合spring(redisTemplate工具类)
- SpringBoot整合Redis及Redis工具类撰写
- Spring整合HttpClient4.5.1
- Spring Boot学习之旅:(六)springboot 整合 redis 以及 redis 通用工具类
- spring和hibernate整合后手动管理事务工具类
- redis整合spring(redisTemplate工具类)
- 四、CXF WebService整合Spring
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- SSH2(Struts2、Spring3与Hibernate3)的整合
- 【j2ee spring】27、巴巴荆楚网-整合hibernate4+spring4(2)
- springmvc4.3.5 spring4.3.5 hibernate 5.2.5 整合
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- spring,springmvc,jpa,mybatis整合配置
- [置顶] OSGI企业应用开发(十四)整合Spring、Mybatis、Spring MVC