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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章