feign.FeignException: status 400 reading xxx 异常

报错: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 之上的 xxxMapping 的注解,如果使用 @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

天坑啊。

原文地址:https://www.cnblogs.com/tangshun100/p/13746126.html