背景
Feign项目启动时报错
RequestParam.value() was empty on parameter 0
代码
对应报错代码:
@FeignClient("spring-cloud-eureka-client")
public interface GreetingClient {
@RequestMapping("/greeting")
String greeting(@RequestParam String name);
}
原因
Spring MVC和Spring Cloud feign都使用了同样的方式去查找参数名
首先会通过反射查找,需要类以-parameters
形式编译
如果失败了,会通过debug info来查找。对于Spring MVC来说,这种方式是没有问题的,但是Feign无法通过这种方式获取,因为javac 编译器会忽略接口参数名的debug info,这就是根源所在。
解决方案
可以通过手动指定注解参数名称来解决问题:
@FeignClient("spring-cloud-eureka-client")
public interface GreetingClient {
@RequestMapping("/greeting")
String greeting(@RequestParam("name") String name);
}