前言
昨天做项目时,和前端同事联调接口,前端同事说xx功能的接口报错了,让我看看啥情况…
避坑
修改前后的feign接口对比:
(修改前)
/**
* 获取用户列表
* @param user 用户信息
* @return 列表
*/
@GetMapping("/user/list")
R<TableDataInfo> selectUserList(SysUser user);
报错:get请求调用feign接口提示“Request method ‘POST’ not supported”(请求方法POST不被支持)。
(修改后)
/**
* 获取用户列表
* @param user 用户信息
* @return 列表
*/
@GetMapping("/user/list")
R<TableDataInfo> selectUserList(@RequestParam("user") SysUser user);
加上 @RequestParam(“user”) 后问题解决。
使用feign远程调用第一次遇到这个问题,网上找了半天也没找出原因。有的博友说,如果它提示get请求的方法不支持‘POST’请求,那么就加上 @RequestParam 注解使该方法强制调用get请求;那么如果出现post请求的方法不支持‘GET’请求这种报错,则加上 @RequestBody 注解使该方法强制调用post请求。
说明
(原文链接:https://blog.csdn.net/qfikh/article/details/88553603)
Get方式参数获取
get请求方式参数是拼接在url后,限制了可以发送的长度。Get不支持使用http Body获取参数,他只支持params,也就是URL拼接参数。如: http://127.0.01:8080/user?name=zhangsan
Post方式参数获取
post传递的参数可以大致分成两种,一种是表单:在sevlet实现中mutipart/form-data和application/x-www-form-urlencoded会被特殊处理,请求参数将被放置于request.paramter,解析成map。第二种,已application/json,参数是存放在json中的,参数必须要用@RequestBody才能解析出来。
@RequestBody是将post请求中内容转为一个整体对象。@RequestBody的解析有两个条件:
1、POST请求中content的值必须为json格式(存储形式可以是字符串,也可以是byte数组);
2、@RequestBody注解的参数类型必须是完全可以接收参数值的类型,比如:Map,JSONObject,或者对应的JavaBean。
Integer类型不能作为@RequestBody注解的参数类型。