项目场景:
SpringCloud微服务,使用feign进行服务间的调用
问题描述
服务启动后出现异常:
nested exception is java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0
原因分析:
IllegalStateException: RequestParam.value() was empty on parameter 0
非法状态异常。大概意思是:第 0 个参数绑定的 value 值为空。也就是说第 0 个参数没有正确的绑定请求的参数映射。
这个错误产生的原因是我们使用了 Feign,在配置了 @FeignClient 注解的接口上声明的方法中的参数使用了 @RequestParam 注解,但是 @RequestParam 注解并没有指定 value 属性。
例如:
@PostMapping("/list")public List list(@RequestParam Integer type,@RequestParam(value = "startTime") String startTime,@RequestParam(value = "endTime") String endTime) {return labelService.list(type, startTime, endTime);
上面因为参数type的@RequestParam未配置(value=”type”),导致了项目启动异常
解决方案:
参数type的添加value配置,@RequestParam(value=”type”)
总结:
Springboot 中可以不指定 value 使用 @RequestParam 注解,但是 Spring cloud 中的 Feign 却是不行
因为Feign 的底层使用的是 httpclient进行通讯,在低版本中会产生这个问题,高版本中已经对这个问题修复了,不过本人还没试过。后面验证