FeignClient报错Method has too many Body parameters解决办法

问题

原来以为 feignClient 的接口与 Controller 的接口完全相同,复制就可以了,如
Controller中接口定义如下

@PostMapping("/findUserByPage")
List<User> findUserByPage(Long age, String name){
	return ...;
}

则对应的 Feign 就是

@PostMapping("/findUserByPage")
List<User> findUserByPage(Long age, String name);

但是遇到了报错

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name '***.UserFeignClient': 
FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: 
Method has too many Body parameters: 
public abstract ***.UserFeignClient.findByPage(java.lang.Integer,java.lang.Integer)

解释

Spring MVC 中,默认从URL中接收参数,比如:

@PostMapping("/findUserByPage")
List<User> findUserByPage(Long age, String name){
	return ...;
}

等效于

@PostMapping("/findUserByPage")
List<User> findUserByPage(@RequestParam Long age,@RequestParam  String name){
return ...;
}

而在 Feign 中,方法参数并不会像 Spring MVC 那样自动绑定到 URL 参数,当没有使用 @RequestParam 时,Feign 会将方法参数默认处理为请求体内容,一个请求不能有多个请求体,所以当 feign 接口有多个参数,且省略了@RequestParam,就会报错Method has too many Body parameters:

结论

SpringMVC 默认是URL传参,参数没指定@RequestParam或@RequestBody时,默认是@RequestParam,而 Feign 中相反,默认是@RequestBody,在 Feign 的接口中,@RequestParam 不能省略,必须使用 @RequestParam 来明确指定 URL 查询参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值