RestTemplate 简介
spring 提供的同步请求Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,
是Spring用于同步client端的核心类,简化了与http服务的通信,并满足RestFul原则,程序代码可以给它提供URL,并提取结果。
本文示例采用钉钉开发者接口文档地址
https://developers.dingtalk.com/document/app
先来看使用 RestTemplate 发送 GET 请求。在 RestTemplate 中,和 GET 请求相关的方法有如下几个:
获取企业内部应用的access_token
get接口举例: GET https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret
这种方式可以直接拼接在地址中例如下面这样
String url = "https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret"; URI uri = URI.create(url); ResponseEntity<String> responseEntity = restTemplate.getForObject(uri, String.class);
第三个参数是一个可变长度的参数,所以我们可以这样,url中的1,2可以分别用参数替换
String appkey="xxxx"; String appsecret="xxxx"; String url = "https://oapi.dingtalk.com/gettoken?appkey={1}&appsecret={2}"; ResponseEntity<String> responseEntity = restTemplate.getForObject(uri, String.class,appkey,appsecret);
Map<String, Object> map = new HashMap<>(); String appkey="xxxx"; String appsecret="xxxx"; String url = "https://oapi.dingtalk.com/gettoken?appkey={appkey}&appsecret={appsecret}"; map.put("appkey", appkey); map.put("appsecret", appsecret); ResponseEntity<String> responseEntity = restTemplate.getForObject(url, String.class, map);
这种方式可以直接拼接在地址中例如下面这样
String url = "https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret"; URI uri = URI.create(url); ResponseEntity<String> responseEntity = restTemplate.getForEntity(uri, String.class);
第三个参数是一个可变长度的参数,所以我们可以这样,url中的1,2可以分别用参数替换
String appkey="xxxx"; String appsecret="xxxx"; String url = "https://oapi.dingtalk.com/gettoken?appkey={1}&appsecret={2}"; ResponseEntity<String> responseEntity = restTemplate.getForEntity(uri, String.class,appkey,appsecret);
将参数put进map里
Map<String, Object> map = new HashMap<>(); String appkey="xxxx"; String appsecret="xxxx"; String url = "https://oapi.dingtalk.com/gettoken?appkey={appkey}&appsecret={appsecret}"; map.put("appkey", appkey); map.put("appsecret", appsecret); ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class, map);
GetForEntity和GetForObject用法几乎完全一致,区别在于前者可以查看请求状态码,请求头信息。
getForEntity返回的是一个ResponseEntity,而getForObject返回的就只是返回内容。getForObject的返回相当于只返回http的body部份而getForEntity的返回是返回全部信息
举例:
首先使用
和 GET 请求相比,RestTemplate 中的 POST 请求多了一个类型的方法
因为body里面不传值,所以此处的第二个参数传个null
String url = "https://oapi.dingtalk.com/service/activate_suite"; URI uri = URI.create(url); ResponseEntity<String> responseEntity = restTemplate.postForEntity(uri, null,String.class);
因为body里面不传值,所以此处的第二个参数传个null
String groupId="xxxx"; String reportId="xxxx"; String url = "https://api.powerbi.com/v1.0/myorg/groups/{1}/reports/{2}/GenerateToken"; ResponseEntity<String> responseEntity = restTemplate.postForEntity(uri, null,String.class,groupId,reportId);
此方法与上面不同的是将参数列入一个map里面
因为body里面不传值,所以此处的第二个参数传个null
String groupId="xxxx"; String reportId="xxxx"; Map<String,Object> map= Maps.newHashMap(); map.put("groupId", groupId); map.put("reportId", reportId); String url = "https://api.powerbi.com/v1.0/myorg/groups/{groupId}/reports/{reportId}/GenerateToken"; ResponseEntity<String> responseEntity = restTemplate.postForEntity(uri, null,String.class,map);
与方法POST-1调用方法一样
与方法POST-2调用方法一样
与方法POST-3调用方法一样
首先是三个postForLocation,注意这三个方法返回的是一个URI,其余都是responseEntity, T
一般用于重定向接受者到一个新的位置,
对于post方法来说,请求参数可以放到请求url里面(uriVariables),也可以放到http的body里面