RestTemplate ——后台请求实体参数未接收
RestTemplate ——后台请求实体参数未接收
环境:
这是一个测试实现远程调用的案例

在这个测试中,用户在浏览器的地址栏输入资源地址:http://locahost/consumer/dept/add,这是一个添加部门信息的请求,
-
用户输入资源地址:
http://localhost/consumer/dept/add?dname=财务部 -
请求交由服务调用方处理,调用方dept-consumer-80向服务提供方发起请求,远程调用
http://locahost:8001/dept/add?dname=财务部 -
服务调用方向数据库添加名为
财务部的部门信息在此过程中,RestTemplate发送请求时,服务提供方能否接收到参数,就尤为重要。
服务调用方:
package com.baicai.controller; /** * @version v1.0 * @ProjectName: dept * @ClassName: DeptController * @Description: TODO(Dept) * @Author: WDD * @Date: 2020/2/14 21:40 */ @RestController public class DeptController { @Autowired private RestTemplate restTemplate; private static final String URL_PREFIX = "http://localhost:8001"; @RequestMapping("/consumer/dept/add") public boolean add(Dept dept){ return restTemplate.postForObject(URL_PREFIX+"/dept/add",dept,Boolean.class); } }
1.服务提供方未接收到参数
服务提供方:
package com.baicai.controller;
/**
* @version v1.0
* @ProjectName: dept
* @ClassName: Controller
* @Description: TODO(Dept控制类)
* @Author: WDD
* @Date: 2020/2/14 21:24
*/
@RestController
public class DeptController {
@Autowired
private DeptService service;
@PostMapping("/dept/add")
public boolean add(Dept dept){
return service.add(dept);
}
}
此时这种情况,提供方不能够就收调用方发来的请求参数dept,即未能给变量dept赋值。
2.服务提供方接收到参数
服务提供方:
package com.baicai.controller;
/**
* @version v1.0
* @ProjectName: dept
* @ClassName: Controller
* @Description: TODO(Dept控制类)
* @Author: WDD
* @Date: 2020/2/14 21:24
*/
@RestController
public class DeptController {
@Autowired
private DeptService service;
@PostMapping("/dept/add")
public boolean add(@RequestBody Dept dept){
return service.add(dept);
}
}
此时可以正常就收到返回的参数,不难发现,我们在服务提供方的add方法的参数上添加了注解@RequestBody,
来表明这是一个请求体,会被赋值,其中原理,还在探究。
注:
在使用RestTemplate远程调用时,需要在服务提供方的请求方法实体参数上添加注解@RequestBody

浙公网安备 33010602011771号