今天在打包部署升级微服务时遇到了一个异常,导致服务未能成功启动。本文将介绍这个异常的产生以及解决办法。

一下时异常的内容:

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,在低版本中会产生这个问题,高版本中已经对这个问题修复了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐