项目场景:

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进行通讯,在低版本中会产生这个问题,高版本中已经对这个问题修复了,不过本人还没试过。后面验证