RestTemplate的常用方式与用法详解

RestTemplate 简介

spring 提供的同步请求Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,
是Spring用于同步client端的核心类,简化了与http服务的通信,并满足RestFul原则,程序代码可以给它提供URL,并提取结果。

本文示例采用钉钉开发者接口文档地址
https://developers.dingtalk.com/document/app

GET请求

先来看使用 RestTemplate 发送 GET 请求。在 RestTemplate 中,和 GET 请求相关的方法有如下几个:
RestTemplate的常用方式与用法详解
获取企业内部应用的access_token
get接口举例: GET https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret

一. getForObject(URI url, Class responseType)

这种方式可以直接拼接在地址中例如下面这样

String url = "https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret";
URI uri = URI.create(url);
ResponseEntity<String> responseEntity = restTemplate.getForObject(uri, String.class);

二. getForObject(String url, Class responseType, Object… uriVariables)

第三个参数是一个可变长度的参数,所以我们可以这样,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);

三. getForObject(String url, Class responseType, Map<String, ?> uriVariables)

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);

四. getForEntity(URI url, Class responseType)

这种方式可以直接拼接在地址中例如下面这样

String url = "https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret";
URI uri = URI.create(url);
ResponseEntity<String> responseEntity = restTemplate.getForEntity(uri, String.class);

五. getForEntity(String url, Class responseType, Object… uriVariables)

第三个参数是一个可变长度的参数,所以我们可以这样,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);

六. getForEntity(String url, Class responseType, Map<String, ?> uriVariables)

将参数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和GetForObject用法几乎完全一致,区别在于前者可以查看请求状态码,请求头信息。
getForEntity返回的是一个ResponseEntity,而getForObject返回的就只是返回内容。getForObject的返回相当于只返回http的body部份而getForEntity的返回是返回全部信息
举例:

首先使用

getForEntity与getForObject 带Header头方式

POST请求

和 GET 请求相比,RestTemplate 中的 POST 请求多了一个类型的方法
RestTemplate的常用方式与用法详解

一. postForEntity(URI url, Object request,Class responseType)

因为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);

二. postForEntity(URI url, Object request, Class responseType,Object… uriVariables)

因为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);

三. postForEntity(URI url, Object request,Class responseType,Map<String, ?> uriVariables)

此方法与上面不同的是将参数列入一个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);

四. postForObject(URI url, Object request,Class responseType)

与方法POST-1调用方法一样

五. postForObject(URI url, Object request, Class responseType,Object… uriVariables)

与方法POST-2调用方法一样

六. postForObject(URI url, Object request,Class responseType,Map<String, ?> uriVariables)

与方法POST-3调用方法一样

七. postForLocation(URI url, Object request, Class responseType)

八. postForLocation(URI url, Object request,Class responseType,Object… uriVariables)

九. postForLocation(URI url, Object request,Class responseType,Map<String, ?> uriVariables)

三者的区别postForLocation,postForEntity,postForObject

首先是三个postForLocation,注意这三个方法返回的是一个URI,其余都是responseEntity, T
一般用于重定向接受者到一个新的位置,

对于post方法来说,请求参数可以放到请求url里面(uriVariables),也可以放到http的body里面

上一篇:第五章 跳转到拨打电话 2.8


下一篇:android 打开部分文件方法汇总整理