文章目录
一、RestTemplate 简介
1、RestTemplate 概述
2、RestTemplate 的配置项
- setBufferRequestBody
是否是否缓冲流来存储请求体,默认true - setProxy
设置代理对象 - setChunkSize
设置每次传输字节长度,与 setBufferRequestBody(false) 结合使用 - setConnectTimeout
设置连接超时时间,默认 -1 - setReadTimeout
设置读取内容超时时间,默认 -1 - setOutputStreaming
设置Connection是否设置输出流程 - setTaskExecutor
设置异步回调执行器
3、RestTemplate 请求方式
- GET
通过请求URI得到资源 - POST
用于添加新的内容 - PUT
用于修改某个内容,若不存在则添加 - DELETE
删除某个内容 - OPTIONS
询问可以执行哪些方法 - HEAD
类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据 - CONNECT
用于代理进行传输,如使用SSL - TRACE
用于远程诊断服务器
二、RestTemplate 使用
1、Get请求方式
- getForEntity()
发送一个HTTP GET请求,返回的ResponseEntity包含了响应体所映射成的对象 - getForObject()
发送一个HTTP GET请求,返回的请求体将映射为一个对象
(1)请求方
@RestController
public class UserRibbonController {
@Resource
private RestTemplate restTemplate;
//没有参数
@GetMapping("/user")
public Result select() throws Exception{
return restTemplate.getForObject("http://eureka-client1/select/", Result.class);
}
//单个参数
@GetMapping("/selectById/{uid}")
public Result selectById(@PathVariable("uid") int uid) throws Exception{
return restTemplate.getForObject("http://eureka-client1/selectById/" + uid, Result.class);
}
//多个参数
@GetMapping("/updateById")
public Result updateById(Users users) throws Exception{
return restTemplate.getForObject("http://eureka-client1/updateById/" + users.getPassword() +"/"+ users.getUid(), Result.class);
}
}
(2)接收方
@RestController
public class UserClientController {
@Resource
private UserService us;
//没有参数
@GetMapping("/select")
public Result select() throws Exception{
Result result = new Result();
List<Users> list = us.select();
if(list.size() > 0) {
result.setList(list);
result.setCode("success");
}else {
result.setMessage("error");
}
return result;
}
//单个参数
@GetMapping("/selectById/{uid}")
public Result selectById(@PathVariable("uid") int uid) throws Exception{
Result result = new Result();
Users users = us.selectById(uid);
if(users != null) {
result.setObject(users);
result.setCode("success");
}else {
result.setMessage("error");
}
return result;
}
//多个参数
@GetMapping("/updateById/{password}/{uid}")
public Result updateById(@PathVariable("password") String password, @PathVariable("uid") int uid) throws Exception{
Users users = new Users();
users.setUid(uid);
users.setPassword(password);
Result result = new Result();
us.updateById(users);
result.setCode("success");
return result;
}
}
2、Post 请求方式
- postForEntity()
POST 数据到一个URL,返回包含一个对象的ResponseEntity,这个对象是从响应体中映射得
到的。 - postForObject()
POST 数据到一个URL,返回根据响应体匹配形成的对象。 - postForLocation()
POST 数据到一个URL,返回新创建资源的URL
(1)请求方
@RestController
public class UserClientController {
@Resource
private RestTemplate restTemplate;
@GetMapping("/updateById")
public Result updateById(Users users) throws Exception{
Result result = restTemplate.postForObject("http://eureka-client1/updateById", users, Result.class);
return result;
}
}
(2)接收方
@RestController
public class UserClientController {
@Resource
private UserService us;
@PostMapping("updateById")
public Result updateById(@RequestBody Users users) throws Exception{
System.out.println(users.getUsername());
Result result = new Result();
us.updateById(users);
result.setCode("success");
return result;
}
}
3、Put 请求方式
- put()
PUT 资源到特定的URL,put请求方式没有返回参数
(1)请求方
@RestController
public class UserRibbonController {
@Resource
private RestTemplate restTemplate;
@GetMapping("/updateById")
public Result updateById(Users users) throws Exception{
restTemplate.put("http://eureka-client1/updateById", users, 11);
Result result = new Result();
result.setCode("success");
return result;
}
}
(2)接收方
@RestController
public class UserClientController {
@Resource
private UserService us;
@PutMapping("updateById")
public void updateById(@RequestBody Users users) throws Exception{
us.updateById(users);
}
}
3、Delete 请求
- delete()
在特定的URL上对资源执行HTTP DELETE操作
4、RestTemplate 其他方法
- exchange()
在URL上执行特定的HTTP方法,返回包含对象的ResponseEntity,这个对象是从响应体中
映射得到的 - execute()
在URL上执行特定的HTTP方法,返回一个从响应体映射得到的对象 - headForHeaders()
发送HTTP HEAD请求,返回包含特定资源URL的HTTP头 - optionsForAllow()
发送HTTP OPTIONS请求,返回对特定URL的Allow头信息