RestTemplate的传参实现(Get、Put、Post)
作者:TwoYellowGuns
RestTemplate配置项解析与GET、POST、PUT、DELETE请求方法详解,涵盖setProxy、setChunkSize、setConnectTimeout等核心配置项,全面覆盖RestTemplate使用场景
一、RestTemplate 简介
RestTemplate 概述
RestTemplate 的配置项
setBufferRequestBody
是否是否缓冲流来存储请求体,默认true
setProxy
设置代理对象
setChunkSize
设置每次传输字节长度,与 setBufferRequestBody(false) 结合使用
setConnectTimeout
设置连接超时时间,默认 -1
setReadTimeout
设置读取内容超时时间,默认 -1
setOutputStreaming
设置Connection是否设置输出流程
setTaskExecutor
设置异步回调执行器
RestTemplate 请求方式
GET
通过请求URI得到资源
POST
用于添加新的内容
PUT
用于修改某个内容,若不存在则添加
DELETE
删除某个内容
OPTIONS
询问可以执行哪些方法
HEAD
类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据
CONNECT
用于代理进行传输,如使用SSL
TRACE
用于远程诊断服务器
二、RestTemplate 使用
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;
}
}
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;
}
}
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);
}
}
Delete 请求
delete()
在特定的URL上对资源执行HTTP DELETE操作
RestTemplate 其他方法
exchange()
在URL上执行特定的HTTP方法,返回包含对象的ResponseEntity,这个对象是从响应体中映射得到的
execute()
在URL上执行特定的HTTP方法,返回一个从响应体映射得到的对象
headForHeaders()
发送HTTP HEAD请求,返回包含特定资源URL的HTTP头
optionsForAllow()
发送HTTP OPTIONS请求,返回对特定URL的Allow头信息
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
