RestTemplate常用于请求第三方接口
一般有get,post,exchange等多种方式
在请求时,可以自己设置请求头等
参考:RestTemplate | 使用详解_ (重点参考)
RestTemplate的请求参数传递问题 RestTemplate发送Get请求通过body传参问题
注意:
get方式是将请求参数设置到url上的
post方式是将参数设置到body里面
post设置请求体的访问方式一般使用:
- 设置请求体的访问方式一般使用map:
- MultiValueMap
params = new LinkedMultiValueMap<>(); - // 除了map以外,也可以使用string,根据请求头类型来确认
-
-
- 示例封装的方法:
-
- public String doPostForBody(String url, MultiValueMap
body) { - HttpHeaders headers = new HttpHeaders();
- // 设置请求类型,根据需要设置
- headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
- // 设置请求头的方式,根据需要设置
- List
cookies = new ArrayList<>(); - cookies.add(expendParam.getCookiesStr());
- headers.put(HttpHeaders.COOKIE, cookies);
- // 设置请求boby
- HttpEntity
> entity = new HttpEntity<>(body, headers); - ResponseEntity
resp = null; - try {
- resp = restTemplate.postForEntity(url, entity, String.class);
- } catch (RestClientException e) {
- logger.error("请求失败:{}", url);
- logger.error("请求失败:", e);
- }
- return resp.getBody();
- }
-
- // 使用完成后一般将string转换为json数据
-
- JSONObject jsonObject = JSON.parseObject(doPostForBody(url,body));
-
- // 注意,存在多个值时,即为数组,获取数组循环转换,
-
- JSONArray jsonArray = jsonObject.getJSONArray("rows");
-
-
如果要将返回的数据设置成自己的实现类,因为json数据是key-value形式,即map形式,一般使用Json格式化工具类转换 ,直接将返回的string使用工具类转换
- @Data
- public class Pojo01 {
- private String field1;
- private String field2;
- private String field3;
- private String field4;
- private String field5;
- }
-
- public class Test01 {
- public static void main(String[] args) {
- Map
hashMap = new HashMap<>(); - hashMap.put("field1", "value1");
- hashMap.put("field2", "value2");
- hashMap.put("field3", "value3");
- hashMap.put("field4", "value4");
- hashMap.put("field5", "value5");
-
- //将HashMap转为JSON,在转为Pojo01对象:
- String toJSON = JSONObject.toJSONString(hashMap);
- Pojo01 pojo01 = JSONObject.toJavaObject(JSON.parseObject(toJSON), Pojo01.class);
- System.out.println(" pojo01 = " + pojo01.toString());
- }
- }