七、创建UcRESTTemplate请求管理器
一、创建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);
} }
七、创建UcRESTTemplate请求管理器的更多相关文章
- 捣鼓一个Ajax请求管理器
随着前端技术的不断发展,现在做的项目里很多页面里都会有大量的ajax请求,随之而来就有了一些问题: 1.没必要的ajax请求怎么处理? 2.ajax链式调用怎么维护? ajax链式调用最原始的写法: ...
- 深入Asyncio(七)异步上下文管理器
Async Context Managers: async with 在某些场景下(如管理网络资源的连接建立.断开),用支持异步的上下文管理器是很方便的. 那么如何理解async with关键字? 先 ...
- 爬虫学习(五)——使用handler管理器对象进行数据爬取的步骤
# 使用管理器对象进行爬取数据的步骤 import urllib.requesturl = "https://www.baidu.com/"# 创建handler的管理器对象han ...
- python2.7高级编程 笔记一(Python中的with语句与上下文管理器学习总结)
0.关于上下文管理器上下文管理器是可以在with语句中使用,拥有__enter__和__exit__方法的对象. with manager as var: do_something(var) 相当于以 ...
- 20151208_使用windows2012配置weblogic节点管理器
经过实践,weblogic节点管理器的作用主要有两点: 1.可通过weblogic控制台远程控制被管server启停. 2.可以自动重启被管server的进程,并且对spring框架提供比直接启动更快 ...
- TaskTracker节点上的内存管理器
Hadoop平台的最大优势就是充分地利用了廉价的PC机,这也就使得集群中的工作节点存在一个重要的问题——节点所在的PC机内存资源有限(这里所说的工作节点指的是TaskTracker节点),执行任务时常 ...
- MQ队列管理器搭建(三)
MQ集群及网关队列管理器的搭建 描述: 如上图所示,为MQ的集群搭建部署图.CLUSTERA.CLUSTERB分别是两个集群,其中Qm1-Qm3.GateWayA为CLUSTERA集群中的队列 ...
- MQ队列管理器搭建(一)
多应用单MQ使用场景 如上图所示,MQ独立安装,或者与其中一个应用同处一机.Application1与Application2要进行通信,但因为跨系统,所以引入中间件来实现需求. Applicat ...
- [mybatis-spring] Transaction 事务/事务处理/事务管理器
使用mybatis-spring的主要原因之一就是: mybatis-spring允许mybatis参与到spring 事务中. mybatis-spring leverage[use (someth ...
随机推荐
- 多线程编程-- part5.1 互斥锁之公平锁-获取锁
基本概念 1.AQS:AbstractQueuedSynchronizer类 AQS是java中管理“锁”的抽象类,锁的许多公共方法都是在这个类中实现.AQS是独占锁(例如,ReentrantLock ...
- shell 删除文本中的重复行
三种常见方法:第一,用sort+uniq,注意,单纯uniq是不行的. shell> sort -k2n file | uniq > a.out 这里我做了个简单的测试,当file中的重复 ...
- 9、linux权限-ACL权限
来自为知笔记(Wiz)
- 最完美ThinkPHP Nginx 配置文件
一个配置文件,完美支持普通,兼容,pathinfo,rewrite4种url模式,别怪我没提醒你收藏哦. 常见的静态文件404时也不会再去跑一遍fastcgi浪费资源. server { listen ...
- Cypress自动化测试系列之二
本文技术难度★★★,如果前编内容顺利执行,请继续. 如果Selenium尚无法灵活运用的读者,本文可能难度较大. “理论联系实惠,密切联系领导,表扬和自我表扬”——我就是老司机,曾经写文章教各位怎么打 ...
- springboot中使用servlet通过配置类
在servlet目录下创建个servlet类,示例代码如下: package com.bjpowernode.springboot.servlet; import javax.servlet.Serv ...
- Some notes of An Insider's Guide to TOEFL iBT
尽早把托福这个坑填上方是正道,在正式上托福课之前阅读了这本Guide,颇受启发——只要是考试,总是有固定的方法的= = An Insider's Guide to TOEFL iBT It is NO ...
- BZOJ4004 [JLOI2015]装备购买[贪心+线性基+高消]
一个物品可以被其他物品表出,说明另外的每个物品看成矩阵的一个行向量可以表出该物品代表的行向量. 于是构造矩阵,求最多选多少个物品,就是尽可能用已有的物品去表示,相当于去消去一些没必要物品, 类似于xo ...
- DevExpress ASP.NET Core v19.1版本亮点:数据网格和树列表
行业领先的.NET界面控件DevExpress 发布了v19.1版本,本文将以系列文章的方式为大家介绍DevExpress ASP.NET Core Controls v19.1中新增的一些控件及增强 ...
- 关于深度学习之TensorFlow简单实例
1.对TensorFlow的基本操作 import tensorflow as tf import os os.environ[" a=tf.constant(2) b=tf.constan ...