RestTemplate使用总结

getForEntity

getForEntity 方法的返回值是一个ResponseEntity,ResponseEntity是 Spring 对 HTTP 请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等

getForObject

  • 只关注返回的消息体的内容

参数

  1. String url, 请求url
  2. Class responseType, 返回类型
  3. java.util.Map<String, ?> uriVariable url参数,如果有的话,必须为map

场景1

返回的数据直接封装到对象

//注意url要加上对应的请求字段
//或者使用占位符,就不用map了
String urlStr = baseURL + gettoken_api + "?corpid={corpid}&corpsecret={corpsecret}";
Map<String, Object> params = new HashMap<>();
params.put("corpid", corpId);
params.put("corpsecret", corpSecret);
QyWxAccessTokenResp resp1 = restTemplate.getForObject(urlStr, QyWxAccessTokenResp.class, params);

场景2

需要从返回的String中取出部分参数,此时返回类型可以写为com.alibaba.fastjson.JSONObject,然后从jsonObject里获取对应的类型

JSONObject jsonObject = restTemplate.getForObject(url, JSONObject.class, params);
String userid = jsonObject.getString("userid");

//或者返回类型为String,此时多了一步,即parse
JSONObject parseObject = JSON.parseObject(restTemplate.getForObject(url, String.class));
String userid = parseObject.getString("userid");

场景3

如果参数传map不行,就直接拼接url

String url = baseURL + "tag/get" + "?access_token=" + accessToken +"&tagid="+tagId;
JSONObject jsonObject = restTemplate.getForObject(url, JSONObject.class);

其他

postForObject

  • 只关注返回的消息体

参数

  1. String url, 请求url
  2. @Nullable Object request, 请求数据
  3. Class responseType, 返回类型
  4. Object… uriVariables url参数

场景1

request参数用map

HashMap<String, Object> params = new HashMap<>();
params.put("auth_code", authCode);
//返回string,然后parse为json
JSONObject jsonObject = JSON.parseObject(restTemplate.postForObject(url, params, String.class));
String permanent_code = jsonObject.getString("permanent_code");

场景2

request参数用一个对象

PostSuiteAccessToken post = new PostSuiteAccessToken();
post.setSuite_id(suiteID);
post.setSuite_secret(suiteSecret);
post.setSuite_ticket(suiteTicket.getWechatValue());
//返回string直接封装到对象
SuiteAccessTokenResp resp = restTemplate.postForObject(url,post,SuiteAccessTokenResp.class);

注意

发post请求时,如果用postman,body里的参数为x-www-form-urlencoded类型,那么用restTemplate的时候,需要按以下的代码模板来做:
在这里插入图片描述

RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("pass", 12345678);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/x-www-form-urlencoded");
HttpEntity<MultiValueMap<String, Object>> r = new HttpEntity<>(params, headers);
String resp = restTemplate.postForObject(url1, r, String.class);

如何在请求https接口时忽略证书验证

猜你喜欢

转载自blog.csdn.net/rakish_wind/article/details/112560995