报错:feign.FeignException: status 400 reading xxx 异常
具体就是feign接口在调用生产者提供的某个方法时异常,无法正常调用。
百思不得其解,因为feign接口和生产者控制器中所写的方法名是一模一样的。
都是:
@RequestMapping("/loginLog_logs")
public List<LoginLog> getMyLoginLogs(String username);
为了排除是生产者方面的问题,进行Junit单元测试之后,排除了这种可能。
折腾一个多小时,最后百度了一番,发现有很多种说法:
1-调用服务的时候,消费者接口中的@RequestParam注解中的value值和服务提供者的controller里面的@RequestParam注解里面的value值一定要保持一致,不然就会报这个错误。
2-Feign 请求服务,在Controller
之上的 xxx
Mapping 的注解,如果使用 @RequestMapping
的话, 需要声明method
属性, 否则就会引发这个异常。即@RequstMapping方法没有指定请求方式。
3-Feign的那个方法使用的@RequestParam注解,而接收的参数长度过长,就会导致报400错误,这时需要换为@RequestBody。
都是什么鬼,发现和我的情况都不一样,问题并没有解决。
最后试着尝试在Feign接口和生产者控制器的方法的参数前加上@RequestParam之后,再指定参数的名字,
@RequestMapping("/loginLog_logs")
public List<LoginLog> getMyLoginLogs(@RequestParam(name="name") String username);
问题竟然解决了。。
也就是说,在遇到这种情况的时候,即使Feign接口和生产者控制器的方法一模一样,但是因为参数没有加上@RequestParam且指定参数属性的名字,就会导致Feign无法成功调用生产端的这个方法。。
同时还可能会报错显示为:java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0
天坑啊。