【笔记】RestTemplate学习笔记

前言

RestTemplate是SpringBoot提供的一个Rest远程调用工具
可以通过RestTemplate实现在SpringBoot项目下发送请求并处理响应

GET请求

无参

url:请求地址
Object.class:响应数据的类型,可以封装实体类作为响应数据的类型

1
restTemplate.getForObject(url, Object.class);

有参

URL传参

param:参数作为字符串拼接在URL地址后面
Object.class:响应数据的类型,可以封装实体类作为响应数据的类型

1
restTemplate.getForObject(url + param, Object.class);

参数列表传参

传递String

{num}:在URL地址后拼接占位符,占位符用一组大括号数字编号组成,从方法第3个参数开始为请求的第1个参数值
Object.class:响应数据的类型,可以封装实体类作为响应数据的类型

1
restTemplate.getForObject(url + "/?name={1}", Object.class, "zhangsan");
传递Map

{name}:在URL地址后拼接占位符,占位符用一组大括号键名组成,从方法第3个参数开始为请求的第1个参数值
Object.class:响应数据的类型,可以封装实体类作为响应数据的类型

1
2
3
4
Map<String, Object> param = new HashMap<>();
param.put("name", "zhangsan");

restTemplate.getForObject(url + "/?name={name}", Object.class, param);

POST请求

有参

  • 如果第二个参数传递的是Map或者对象,那么RestTemplate将自动转换为一个HttpEntity对象处理
  • 如果第二个对象传递的是HttpEntity对象,那么这个对象会被当作完整的HTTP请求对象处理,此时可以定义请求头内容

传递Map

  • 注意:这里只能使用LinkedMultiValueMap()

Object.class:响应数据的类型,可以封装实体类作为响应数据的类型

1
2
3
4
MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
param.add("name", "zhangsan");

restTemplate.postForObject(url, param, Object.class);

传递对象

  • 创建一个实体类
1
2
3
4
5
6
7
8
9
10
11
class User {
String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
1
2
3
4
User param = new User();
param.setName("zhangsan");

restTemplate.postForObject(url, param, Object.class);

传递HttpEntity

1
2
3
4
5
6
7
8
9
10
11
12
13
HttpHeaders headers = new HttpHeaders();

// 设置请求头格式(可选)
headers.setContentType(MediaType.parseMediaType("application/json"));

// 设置携带的token(可选)
httpHeaders.add("token", "");

// 不带参数
restTemplate.postForObject(url, new HttpEntity<>(headers), Object.class);

// 带参数
restTemplate.postForObject(url, new HttpEntity<>(param, headers), Object.class);

exchange方法

1
2
3
4
HttpHeaders headers = new HttpHeaders();

Map param = new HashMap();
param.put("name", "zhangsan");

GET请求(不带参数)

1
ResponseEntity<Object> response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(headers), Object.class);

POST请求(不带参数)

1
ResponseEntity<Object> response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(headers), Object.class);

POST请求(带参数)

1
ResponseEntity<Object> response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(param, headers), Object.class);

获取响应体

1
Object responseBody = response.getBody();

中文字符转换

  • 如果遇到中文字符,需要转换
1
url = url + "/?name=" + URLEncoder.encode("张三", "UTF-8");

完成

参考文献

简书——程序员小杰
CSDN——自傷無色丶