Spring提供了一种简单便捷的模板类 RestTemplate 来调用 RESTful 接口。它提供了多种便捷访问HTTP服务的方法,能够大大提高客户端的编写效率。
二、使用 1、依赖注入需要先将RestTemplate以Bean的形式注入到Spring容器中。使用的使用@Resource调用。
@Bean
@LoadBalanced
RestTemplate getRestTemplate(){
return new RestTemplate();
}
2、get请求
getForObject返回对象
@GetMapping("/client5")
public Object client5(){
//自动处理url
String url = "http://Eureka-provider/hi";
String object = restTemplate.getForObject(url, String.class);
System.out.println(object);
return object;
}
getForEntity
getForEntity方法的返回值是一个ResponseEntity,ResponseEntity是Spring对HTTP请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等。
<200,Hi,[Content-Type:"text/plain;charset=UTF-8", Content-Length:"8", Date:"Fri, 10 Apr 2020 09:58:44 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive"]>
@GetMapping("/client6")
public Object client6(){
//自动处理url
String url = "http://Eureka-provider/hi";
ResponseEntity entity = restTemplate.getForEntity(url, String.class);
System.out.println(entity);
return entity;
}
入参调用
使用占位符
@GetMapping("/client9")
public Object client9(){
//自动处理url
String url = "http://Eureka-provider/user/{id}/{name}";
User user = restTemplate.getForObject(url, User.class,"1","123");
return user;
}
使用Map
@GetMapping("/client10")
public Object client10(){
//自动处理url
String url = "http://Eureka-provider/user/{id}/{name}";
HashMap map = new HashMap<>();
map.put("id","1");
map.put("name","123");
User user = restTemplate.getForObject(url, User.class,map);
return user;
}
3、post请求
postForObject、postForEntity类似get请求。
@GetMapping("/client11")
public Object client11(){
//自动处理url
String url = "http://Eureka-provider/user";
User user = restTemplate.postForObject(url, new User(1,"123"),User.class);
ResponseEntity entity = restTemplate.postForEntity(url, new User(1, "123"), User.class);
return user;
}
postForLocation返回URI
用于重定向
Cunsumer
@GetMapping("/client12")
public Object client12(HttpServletResponse response) throws IOException {
//自动处理url
String url = "http://Eureka-provider/user/login";
URI uri = restTemplate.postForLocation(url, new User(1, "123"));
response.sendRedirect(uri.toString());
return uri;
}
Provider
需要设置头信息,不然返回的是null
@PostMapping("/user/login")
public URI userLogin(@RequestBody User user, HttpServletResponse response) throws URISyntaxException {
URI uri = new URI("https://www.baidu.com/s?name="+user.getName());
response.addHeader("Location", uri.toString());
return uri;
}
4、其他请求
同理get、post



