目录
一、应用说明
项目开发过程中,出于项目分离考虑、项目访问安全及项目集中化管理考虑,有时候需要建立接口层统一对接底层微服务,向外部暴露接口层访问信息,外部仅能访问接口层,接口获取相关信息拼接后再请求微服务请求,访问时携带bean封装的多对象参数,返回结果为JSON参数,封装成bean对象,本章主要介绍http请求方式访问方式。
二、涉及知识点介绍
1、RestTemplate
1)RestTemplate是string框架自带的通用处理类,继承HttpEntity,封装了http链接请求访问,可以大大简化与http的通信过程,变量包括URL链接和返回类型对象。
2)RestTemplate默认依赖JDK提供http连接的能力(HttpURLConnection),也可以通过setRequestFactory方法替换为例如 Apache HttpComponents、Netty或OkHttp等其它HTTP library。
3)RestTemplate类具有headForHeaders()、getForObject()、postForObject()、put()和delete()等方法。
RestTemplate client = new RestTemplate();
//执行HTTP请求
ResponseEntity<ResponseVo> response = client.getForEntity(httpUrl, ResponseVo.class);
2、SimpleClientHttpRequestFactory
RestTemplate的this.requestFactory 默认是没有超时时间处理,由于RestTemplate底层是SimpleClientHttpRequestFactory,可以通过自定义构造函数添加超时设置。
//复杂构造函数的使用
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
// 设置超时
requestFactory.setConnectTimeout(timeOut);
3、bean与MAP的转换
1)访问时携带bean封装的多对象参数,因此要将bean封装的多对象参数转换成map,方便后续URL链接拼接。
2)HashMap容量初始值设置为16可以有效提高性能,如果没有设置初始容量大小,随着元素的不断增加,HashMap会发生多次扩容,而HashMap中的扩容机制决定了每次扩容都需要重建hash表,因此非常影响性能。
3)Map是一个接口,每个元素包含一个key对象和一个value对象,对象间存在映射对应关系,访问元素时,指定key可以找到对应的value,因此key必须是唯一的不能重复,当key相同时,后面的value值会覆盖之前的value值。
public Map<String, Object> toMap() {
Map<String, Object> map = new HashMap<>(16);
BeanMap beanMap = BeanMap.create(this);
for (Object key : beanMap.keySet()) {
map.put(key + "", beanMap.get(key));
}
return map;
}
4、配置文件设置相关变量值
application.yml配置文件配置相关变量,包括访问链接信息及超时时间
searchUrl = http://157.126.376.240/list
timeOut = 5000
java类调用配置文件相关值
@Value("${searchUrl}")
private String searchUrl;
@Value("${timeOut}")
private Integer timeOut;
6、URL 拼接
在固定的URL上拼接用户请求的参数返回访问链接。
public String getUrl(Map<String,Object> params){
StringBuilder httpUrl = new StringBuilder(searchUrl);
if(params != null){
httpUrl.append("?");
for</