ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RestTemplate的常用方式与用法详解

2021-07-08 23:29:41  阅读:482  来源: 互联网

标签:appkey responseType String url RestTemplate URI 用法 appsecret 详解


RestTemplate 简介

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

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

GET请求

先来看使用 RestTemplate 发送 GET 请求。在 RestTemplate 中,和 GET 请求相关的方法有如下几个:
在这里插入图片描述
获取企业内部应用的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 请求多了一个类型的方法
在这里插入图片描述

一. 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里面

标签:appkey,responseType,String,url,RestTemplate,URI,用法,appsecret,详解
来源: https://blog.csdn.net/qq_41316955/article/details/118501368

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有