前言
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"));
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——自傷無色丶