今天在打包部署升级微服务时遇到了一个异常,导致服务未能成功启动。本文将介绍这个异常的产生以及解决办法。
一下时异常的内容:
nested exception is java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0
这是一个非法状态异常。意思是说,第 0 个参数绑定的 value 值为空。也就是说第 0 个参数没有正确的绑定请求的参数映射中。
一看到 RequestParam.value() 异常,我们就应该联想到是 @RequestParam 注解产生的。
这个错误产生的原因是我们使用了 Feign,在配置了 @FeignClient 注解的接口上声明的方法中的参数使用了 @RequestParam 注解,但是 @RequestParam 注解并没有指定 value 属性。具体如下:
@FeignClient(name = "xttblog-cloud-producer") public interface XttblogService { @RequestMapping(value = "/xttblog", method = RequestMethod.POST) int cal(@RequestParam(required = false) String a); }
这个时候,我们在启动项目,就会出现“nested exception is java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0”异常。
进而会影响到 XttblogService 实例的创建,雪崩效应,导致整个项目无法启动。
在 SpringMVC 和 Springboot 中都可以使用 @RequestParam 注解,不指定 value 的用法,为什么到了 Spring cloud 中的 Feign 这里就不行了呢?
这是因为和 Feign 的实现有关。Feign 的底层使用的是 httpclient,在低版本中会产生这个问题,高版本中已经对这个问题修复了。
参考资料
- Fiegn Client with Spring Boot: RequestParam.value() was empty on parameter 0
- Feign bug when use @RequestParam but not have value
: » nested exception is java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/251839.html