先把结论放出来:
@RequestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。
今天在使用springCloud中的Openfeign时,一开始遇到了一个问题,就是我通过Talend API Tester修改数据时,传过去的json类型数据总是无法被消费者的控制器接收到参数。消费者的控制器签名如下:
@PutMapping
public boolean updateHandler(Depart depart) {
return departService.modifyDepart(depart);
}
问题是我之前测试的时候好像没有问题,我是可以修改数据的。经过一番折腾,我才想起来,我一开始修改数据是利用的form表单提交的,其传入的数据类型并不是json类型的,如下图所示:
所以我用上面那种控制器的签名方式是能接收到前端传过去的参数的,后面我改成传json类型的数据后(如下图所示),结果一直接收不到数据。
解决方式:在控制器方法签名的参数前面加上@RequetBody注解。修改后的注解如下代码所示,同时需要给提供者的控制器签名也加上@RequetBody,如果OpenFeign的代理接口传过去的参数也是json类型的话(我这里就是json类型的)。
@PutMapping
public boolean updateHandler(@RequestBody Depart depart) {
return departService.modifyDepart(depart);
}