nested exception is java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0

JAVA herman 2912浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

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

一下时异常的内容:

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

参考资料

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号1:xmtxtt(5000人已满),微信号2:codedq(5000人已满),微信号3:xttblog(超2800)。备注:“xttblog”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » nested exception is java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0