之前用过很多次restTemplate,主要用的get请求和post请求的getForObject和postForObject方法
get请求一般我用的是:restTemplate.getForObject(String var1, Class var2)
参数分别为请求url,返回体类型
举个例子:
String forObject = restTemplate.getForObject(“https://www.baidu.com?userId=1111”, String.class);
对返回参数我习惯用String接收然后转成JSONObject,再具体操作(这里可以直接用JSONObject,个人习惯)。当然如果确定返回体的话,可以直接用返回体接收。
body = (JSONObject) JSON.parseObject(forObject);
get请求也可以restTemplate.getForObject(String var1, Class var2, Map<String, ?> var3)
第三个参数是请求入参,第一个参数的url要用占位符
HashMap hashMap = new HashMap();
hashMap.put(“userId”, “123456);
String forObject = restTemplate.getForObject(“https://www.baidu.com?userId={userId}”, String.class, hashMap);
post请求一般用的是 postForObject(URI url, @Nullable Object request, Class responseType)
参数跟getForObject的一样。
举例:
HashMap hashMap = new HashMap();
hashMap.put(“userId”, “123456);
String forObject = restTemplate.postForObject(”https://www.baidu.com“, hashMap, String.class);
最近用到get请求的时候,要求添加请求头,发现getForObject不能满足,于是去了解了一下。
应该用restTemplate.exchange方法。上述的两个方法在底层都是调的exchange。
还是举例:
HttpHeaders headers = new HttpHeaders();
headers.add(“Authorization”, authorization);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity entity = new HttpEntity<>(null, headers);
ResponseEntity exchange = restTemplate.exchange(requesturl, HttpMethod.GET, entity, String.class);
JSONObject body = (JSONObject) JSON.parseObject(exchange.getBody().toString());
最开始用的时候,看的exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, Class responseType, Object… uriVariables)
解释说httpEntity中装封装好的请求头和请求体,uriVariables中放入参。试了好几次,先后尝试过将入参hashmap放到httpEntity和uriVariables,都发现读不到请求体,最后是将入参拼在url链接中,然后那两个都没填,请求成功了。今天正好有空,顺手记录一下。
Life is fantastic!!