1.spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:cache="http://www.springframework.org/schema/cache" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache-4.0.xsd"
default-autowire="byName" default-lazy-init="true">
<!-- httpclient的实现,带连接池-->
<bean id="ky.pollingConnectionManager" class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager">
<!--整个连接池的并发-->
<property name="maxTotal" value="200" />
<!--每个主机的并发-->
<property name="defaultMaxPerRoute" value="200" />
</bean>
<bean id="ky.httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder" factory-method="create">
<property name="connectionManager" ref="ky.pollingConnectionManager" />
<!--开启重试-->
<property name="retryHandler">
<bean class="org.apache.http.impl.client.DefaultHttpRequestRetryHandler">
<constructor-arg value="2"/>
<constructor-arg value="true"/>
</bean>
</property>
<property name="defaultHeaders">
<list>
<bean class="org.apache.http.message.BasicHeader">
<constructor-arg value="User-Agent"/>
<constructor-arg value="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36"/>
</bean>
<bean class="org.apache.http.message.BasicHeader">
<constructor-arg value="Accept-Encoding"/>
<constructor-arg value="gzip,deflate"/>
</bean>
<bean class="org.apache.http.message.BasicHeader">
<constructor-arg value="Accept-Language"/>
<constructor-arg value="zh-CN"/>
</bean>
</list>
</property>
</bean>
<bean id="ky.httpClient" factory-bean="ky.httpClientBuilder" factory-method="build" />
<bean id="ky.clientHttpRequestFactory" class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
<constructor-arg ref="ky.httpClient"/>
<!--连接超时时间,毫秒-->
<property name="connectTimeout" value="5000"/>
<!--读写超时时间,毫秒-->
<property name="readTimeout" value="10000"/>
</bean>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg ref="ky.clientHttpRequestFactory"/>
<property name="errorHandler">
<bean class="org.springframework.web.client.DefaultResponseErrorHandler"/>
</property>
<!--
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
-->
</bean>
<bean id="restService" class="com.ultrapower.tomas.rest.impl.RestService">
<property name="restTemplate" ref="restTemplate" />
</bean>
</beans>
2.提供服务的Service类和接口
public class RestService implements IRestService
{
private static Logger logger = LoggerFactory.getLogger(RestService.class);
private RestTemplate restTemplate;
public void setRestTemplate(RestTemplate restTemplate)
{
this.restTemplate = restTemplate;
}
@Override
public String doPostForString(String url, Map<String, String> formParams)
{
if(formParams==null || formParams.isEmpty()) {
return doPost(url);
}
MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<String, String>();
for(String key : formParams.keySet()) {
requestEntity.add(key, formParams.get(key));
}
return restTemplate.postForObject(url, requestEntity, String.class);
}
@Override
public Map<String, String> doPostForMap(String url, Map<String, String> formParams)
{
MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<String, String>();
for(String key : formParams.keySet()) {
requestEntity.add(key, formParams.get(key));
}
return restTemplate.postForObject(url, requestEntity, Map.class);
}
@Override
public List<Map<String, String>> doPostForList(String url, Map<String, String> formParams)
{
MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<String, String>();
for(String key : formParams.keySet()) {
requestEntity.add(key, formParams.get(key));
}
return restTemplate.postForObject(url, requestEntity, List.class);
}
@Override
public String doPost(String url)
{
return restTemplate.postForObject(url, HttpEntity.EMPTY, String.class);
}
@Override
public String doGetForString(String url, Map<String, String> formParams)
{
return restTemplate.getForObject(url, String.class, formParams);
}
@Override
public Map<String, String> doGetForMap(String url, Map<String, String> formParams)
{
return restTemplate.getForObject(url, Map.class, formParams);
}
@Override
public List<Map<String, String>> doGetForList(String url, Map<String, String> formParams)
{
return restTemplate.getForObject(url, List.class, formParams);
}
@Override
public String doGet(String url)
{
try
{
return restTemplate.getForObject(url,String.class);
} catch (Exception e)
{
logger.error("GET请求出错:{}", url, e);
}
return null;
}
}
public interface IRestService
{
public String doPostForString (String url, Map<String, String> formParams);
public Map<String, String> doPostForMap (String url, Map<String, String> formParams);
public List<Map<String, String>> doPostForList (String url, Map<String, String> formParams);
public String doPost (String url);
public String doGetForString (String url,Map<String, String> formParams);
public Map<String, String> doGetForMap (String url,Map<String, String> formParams);
public List<Map<String, String>> doGetForList (String url,Map<String, String> formParams);
public String doGet (String url);
}
3.调用rest服务:
restService.doPostForMap(url, params);//url是springmvc控制器某方法的名字,参数要对应上
注意:配置文件中转换器部分代码一定要去掉,否则会报错。