七、创建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 ...
随机推荐
- Delphi 使用断点
- insightface作者提供数据训练解读
1.下载源码: 开源代码地址:https://github.com/deepinsight/insightface 2.查看作者项目训练要求 (1)训练数据 训练数据使用作者提供并制作好的数据,如下图 ...
- spring注解 @profile 以及 注解@Slf4j
@Slf4j 如果不想每次都写private final Logger logger = LoggerFactory.getLogger(XXX.class); 可以用注解@Slf4j 一.在pom ...
- 【洛谷P1280】尼克的任务
题目大意:一个人在时间 [1,N] 内工作,现有 M 个任务,每个任务需要在一段固定的时间区间内完成,任务之间的时间可能有重叠.若当前时间有任务要开始,且人处于空闲状态,则一定要这个人来做,否则这个人 ...
- visudo修改编辑器vim
update-alternatives --config editor
- fixed固定时弹窗上的input被软键盘遮住的问题
<div class="pwhCover"> <div class="pwhCon"> <div class="pwhT ...
- puppet集群
实验目的: 由于现有的环境中,puppetmaster是单节点,客户端更新时出现了更新失败和时间较长等现象.考虑将puppetmaster做成集群的模式,解决大量客户端更新延时和单节点故 ...
- shell脚本日志指南(1)
1.初始化日志文件.对文件的大小进行判断和压缩 LOG=$ if [ -e "${LOG}" ];then LOG_SIZE=`ls -l "${LOG}"| ...
- 2017 网易游戏互娱游戏研发4.21(offer)
网易游戏互娱(offer) 去年这个时候就参加过网易游戏的实习生招聘,到今年总共收到了4次拒信.不过这次运气好,终于get了最想要的offer.去年实习生互娱笔试挂,秋招笔试挂,今年春招互娱投了连笔试 ...
- Atcoder Regular Contest 066 F genocide【JZOJ5451】
题目 分析 \(s[i]\)表示a前缀和. 设\(f[i]\)表示做完了1~i的友谊颗粒的最优值(不一定选i),那么转移方程为 \[f[i]=max\{f[i-1],max\{f[j]-s[i]+s[ ...