一、创建UcRESTTemplate管理器封装

import com.alibaba.fastjson.JSON;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate;
import java.util.Map;

所需导入的包

public class UcRESTTemplate {

    private static final int default_connectionTimeout = 30 * 1000;
private static final int default_socketTimeout = 30 * 1000;
private int connectionTimeout = 30 * 1000;
private int socketTimeout = 30 * 1000;
private int minsTimeoutTime = 1000; private static final Logger logger = LoggerFactory.getLogger(UcRESTTemplate.class); public UcRESTTemplate() {
this.connectionTimeout = UcRESTTemplate.default_connectionTimeout;
this.socketTimeout = UcRESTTemplate.default_socketTimeout;
} public UcRESTTemplate(int connectionTimeout, int socketTimeout) {
this.connectionTimeout = connectionTimeout < this.minsTimeoutTime ? UcRESTTemplate.default_connectionTimeout
: connectionTimeout;
this.socketTimeout = socketTimeout < this.minsTimeoutTime ? UcRESTTemplate.default_socketTimeout
: socketTimeout;
} private CloseableHttpClient buildHttpClient() {
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(this.connectionTimeout)
.setSocketTimeout(this.socketTimeout).build();
HttpClientBuilder cb = HttpClients
.custom()
.disableAutomaticRetries()
.setSSLHostnameVerifier(new NoopHostnameVerifier())
.setDefaultRequestConfig(requestConfig); try {
// set ssl context
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, new TrustManager[] { new X509TrustManager() { @Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
} @Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) {
} @Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) {
}
} }, null); cb.setSslcontext(ctx);
} catch (GeneralSecurityException ex) {
throw new RuntimeException(ex);
}
return cb.build();
} private static RestTemplate buildTemplate(CloseableHttpClient client) {
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(
client);
return new RestTemplate(requestFactory);
} /**
* @param request
* @param url
* @param params maybe null
* @return
*/
public ResponseEntity<String> getEntity(String url, HttpEntity<?> request, Map<String, ?> params) {
if (null == params){
return getEntity(url, request, String.class);
}else {
try {
try (CloseableHttpClient client = this.buildHttpClient();) {
return UcRESTTemplate.buildTemplate(client).exchange(url, HttpMethod.GET, request, String.class, params);
} catch (HttpStatusCodeException ex) {
this.handleServerException(url, ex);
return null;
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
} public ResponseEntity<String> getEntity(String url, HttpEntity<?> request) {
return getEntity(url, request, String.class);
} public <T> ResponseEntity<T> getEntity(String url, HttpEntity<?> request, Class<T> responseType) {
try {
try (CloseableHttpClient client = this.buildHttpClient();) {
return UcRESTTemplate.buildTemplate(client).exchange(url, HttpMethod.GET, request, responseType);
} catch (HttpStatusCodeException ex) {
this.handleServerException(url, ex);
return null;
}
} catch (IOException e) {
throw new RuntimeException(e);
}
} public ResponseEntity<String> postEntity(String url, HttpEntity<?> request) {
try {
try (CloseableHttpClient client = this.buildHttpClient();) {
return UcRESTTemplate.buildTemplate(client).postForEntity(url, request,
String.class);
} catch (HttpStatusCodeException ex) {
return this.handleServerException(url, ex);
}
} catch (IOException e) {
UcRESTTemplate.logger.error("exception is " + e);
throw new RuntimeException(e);
}
} protected ResponseEntity<String> handleServerException(String url,
HttpStatusCodeException ex) {
HttpStatus statusCode = ex.getStatusCode();
String respString = ex.getResponseBodyAsString();
logger.error("url:" + url+",statusCode:"+statusCode, ex);
switch (statusCode) {
case CONFLICT:
return new ResponseEntity<>(respString, statusCode);
case NOT_FOUND:
throw new RuntimeException("URL not found: " + url);
default:
logger.error("Response string:\n" + respString);
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) JSON.parse(respString);
if (map.containsKey("stackTrace")) {
Exception ori = JSON.parseObject(respString, Exception.class);
throw new RuntimeException("Exception thrown from server", ori);
} else {
throw new RuntimeException(respString);
}
}
} /**
* 发送get请求,获取返回结果
*
* @param <T>
* @param url
* @param cls
* @return
*/
public <T> T sendHttpsGet(String url, Class<T> cls) {
CloseableHttpClient client = this.buildHttpClient();
return buildTemplate(client).getForObject(url, cls);
} }

最新文章

  1. 8-9 MyBatis基础课
  2. Activity Intent Flags及Task相关属性
  3. IOS学习笔记—苹果推送机制APNs
  4. 如何使VS2008 调试网站的根目录和IIS调试的一致?
  5. res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
  6. BZOJ 1176 MOKIA
  7. css3 transfrom使用以及其martix(矩阵)属性与其它属性的关系
  8. linux压缩解压缩
  9. python中跟字符串相关的一些操作
  10. View的呈现(一)ActionResult
  11. React-Native集成到已有项目中的总结
  12. UGUI血条跟随
  13. font_awesome的icon库的使用
  14. React-使用combineReducers完成对数据对拆分管理
  15. jQuery 设置/获取样式
  16. 强大的安卓手机远程管理工具 – Droidjack
  17. 将url动态转换成二维码插件 - 兼容IE8
  18. NMS—卷积神经网络
  19. LUA IO库
  20. 一款纯css3实现的tab选项卡

热门文章

  1. Python的__hash__函数和__eq__函数
  2. lwip 内存配置和使用,以及 如何 计算 lwip 使用了多少内存?
  3. double to long
  4. parfile解决exp时tables过多问题
  5. hdu4405 概率dp
  6. redis事务(转载)
  7. excel匹配相应条件 自动填充数据
  8. static成员变量
  9. Python 面向对象Ⅳ
  10. UML中的类图及类图之间的关系