作者:神游一梦 | 来源:互联网 | 2023-08-30 08:26
起因:在工作中经常需要使用java去调用其他网络资源,比如微信小程序、公众号开发的过程中需要的各种API。之前一直使用的是httpClient,后来在百度的时候偶然间发现了这个,惊为天人,学
起因:在工作中经常需要使用java去调用其他网络资源,比如微信小程序、公众号开发的过程中需要的各种API。之前一直使用的是httpClient,后来在百度的时候偶然间发现了这个,惊为天人,学习一下,并将他应用到日常的工作开发中,简化开发。
1.RestTemplate的来源
来到上海工作遇到的第一个项目是 单体项目,由一个外包团队开发完成。接手之后,将spring从3.x升级到4.x,ibatis还未升级,之后做一个ibatis升级mybatis的博客。
以下是RestTemplate的官方文档,文档中说明,在spring5.x之后逐渐的不再维护RestTemplate了,替代他的将是WebClient。
2.RestTemplate的初始化
先看一下他的构造函数,有无参构造与有参构造,如果我们使用的是无参构造,那么他默认使用的是HttpURLConnection,如果使用有参构造,必须要传入一个相应的工厂,才可以,这里也支持netty(挖个坑)以及HttpClient。
将RestTemplate运用到我们的项目中去,(初始化)
//第一种,直接创建
RestTemplate rest = new RestTemplate();
//第二种,为了更好的去操作,以及之后的替换,我们可以将RestTemplate注册到我们的spring中,这样可以统一管理,如果想要换源, 也可以更好的操作。
@Configuration
public class RestConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
3.使用RestTemplate进行网络访问
这里只对exchange方法进行介绍,get,post等方法的使用大同小异,且皆可用exchange方法进行代替,所以,也就少写一些。
请参考我的另一篇blog,(包含get,post,exchange)本篇已过时。
//传参,必须是这个MultiValueMap-非requestBody传参
MultiValueMap headers = new LinkedMultiValueMap();
headers.add("Content-Type", "application/json");
// requestBody传参 不能使用MultiValueMap 这个类型
// HttpHeaders httpHeaders = new HttpHeaders();
// httpHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity requestEntity = new HttpEntity(JSON.toJSON(webappTemplateMsg), headers);
//无参构造,使用的是,HttpURLConnection
RestTemplate rest = new RestTemplate();
String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send";
//exchange 使用的时候需要注意,请求使用HttpEntity 返回使用ResponseEntity
ResponseEntity entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
我这里返回的是流,所以使用的是byte[],方法如下:
分别传入,url,请求方法,httpEntry,返回的类型R,这样就可以使用相应的ResponseEntity来接收了
以上就是 RestTemplate中我学到的东西,如果还有高级操作或坑,会继续更新。WebClient暂时还未用到,但之后肯定要学习和掌握的。
不要以为每天把功能完成了就行了,这种思想是要不得的,互勉~!