在写毕业设计的过程中遇到2个关于Feign调用的有趣点
- 当你编写Feign时,当你的参数内含有一个普通对象的时候,这里的GET请求在Feign传递过程中便会自动转换成POST请求,就需要按照如下的编写。客户端可以为GET请求,接收前端得到的参数,于此同时服务端就需要改为POST请求
客户端:
@RequestMapping(value = "/list" , method = RequestMethod.GET)
public Object getList(PmsProductQueryParam pmsProductQueryParam,
@RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum){
}
服务端:
@RequestMapping(value = "/list" , method = RequestMethod.POST)
public Object getList(@RequestBody PmsProductQueryParam pmsProductQueryParam,
@RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum){
}
如果你在服务端是GET请求,那么就会报请求的GET请求方式不符的问题(应该是405错误),因为上文所提到的,你的请求类型已经自动被转为POST请求了
- 通过Feign传递复杂对象的时候,就会造成传递的对象丢值的问题。依旧是上文的接口,pmsProductQueryParam这个类在传递过程到最后直接丢值,导致接口错误。
Solution:解决办法也很简单,加上@RequestBody注解。原因的话是因为Feign传递过程中会把你想要传递的对象塞入RequestBody中,如果你不加注解,自然也就读取不到这个类的数据了