Spring @RequestParam必须要加上参数名

参考文章:https://my.oschina.net/zhukp/blog/173042

一、使用方式

看网上资料学spring时,都在说

1.直接写@RequestParam就行了,会把请求中同名参数绑定到方法上。
2.如果参数名和变量名不一致,可以使用@RequestParam(name),告诉spring,使用指定名字入参。

第一这种讲法明明是错误的。只有在debug模式编译时,参数名才会保留在class文件中,spring由此可以反射绑定。我们的应用明显不可能在debug模式下打包。因此第一种误人子弟啊,老师告诉你很简单的默认值做法是错误的,第二种方式才是正确的写法。

二、验证说明

eclipse有个编译开关,会把变量写入到class文件中。因此需要明确告诉Spring入参。

1、设置编译开关

右击项目,选择“属性”,打开“属性对话框”,选择“Java Compiler”然后再打开的选项卡将“Add variable attributes to generated class files”取消勾选,意思是不将局部变量信息添加到类文件中

2、取消勾选和勾选后class文件对比

取消勾选,变量名为arg0,即未存储定义的变量名urlId:


勾选后,变量名为urlId存储在class文件中:

3、调用测试

取消勾选:


控制台报错:java.lang.IllegalArgumentException: Name for argument type [java.lang.Integer] not available, and parameter name information not found in class file either.


勾选后:

4、eclipse打war包后发布到本地tomcat服务器

取消勾选与勾选后请求结果与3相同。即勾选后可以正常响应,未勾选报错。

5、添加name属性后,无论勾不勾选,都可正常响应。

三、总结

为防止上述情况的发生,@RequestParam必须要加上参数名



发布了53 篇原创文章 · 获赞 14 · 访问量 13万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章