栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

PathVariable annotation was empty on param 0..及@PathVariable编译后的.class文件参数名变为var1的解决办法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PathVariable annotation was empty on param 0..及@PathVariable编译后的.class文件参数名变为var1的解决办法

报错:java.lang.IllegalStateException: PathVariable annotation was empty on param 0.及@PathVariable编译后的.class文件参数名变为var1的解决办法

在IDEA中做项目时,使用spring框架进行开发的时候在controller或者是再用eureka做Client接口时使用@PathVariable从链接链路中获取值的时候
例如:

@GetMapping("/{orderId}")
JsonResult> getItems(@PathVariable String orderId);`

在使用idea编译时会报错java.lang.IllegalStateException: PathVariable annotation was empty on param 0.
这个报错时表示@PathVariable自动获取的参数名称和你给的链接链路中的名字没有对应,但是我们写的参数名和链接链路中获取的名字明明是一样的为什么会这样呢
是因为在8以前的jdk版本的时候,我们利用反射只能获取到参数类型,然后参数名字都是利用arg0,arg1,arg2…所以在使用一些反射编程方面上不是很方便,jdk8开始开辟了这项function,但是我们正常情况下使用jvm不会默认保留参数名字。但是因为IDEA的编译版本不同会导致一些小的编译环境不同,可以发现大部分给的解决方式是在@PathVariable(“orderId”)的解决办法就想下面的代码一样

@GetMapping("/{orderId}")
JsonResult> getItems(@PathVariable("orderId") String orderId);`

但是从jdk8后已经提供了新的方法之后可以通过idea的配置进行更改这种出错都是在idea生成的class文件中生成的代码是这样的

@GetMapping({"/{orderId}"})
JsonResult> getItems(@PathVariable String var1);

在idea中可以这样设置File→Settings→Build, Execution, Deployment→Compiler→JAVA Compiler里面添加-parameters,就可以使Java通过反射获取参数名啦


进入Java Compiler中在最下面的Override compiler parameters per-module:下方的表格中将你的所有module都添加上-parameters参数就可以使Java通过反射获取参数名啦

其实在需要反射的module中添加-parameters参数就可以了,但是为了防止后面对相关的module需要使用@PathVariable的情况建议都加上,然后找到这个项目的target把整个target都删除掉在重新运行idea代码就可以了,也可以使用maven找到相应的module名字点开找到Lifecycle里面找到clean也可以清除target在重新运行spring启动类就可以成功运行了,点开class文件发现idea已经成功映射了

注意:在没有手动删除target的时候或者是没有用maven进行clean清除编译好的class文件极大可能会导致继续报错,因为idea的发现你的代码没有变动不会对代码进行重新编译,会执行之前编译的class文件及出错的class文件需要删除后重写编译才会生成新的class文件

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708301.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号