Spring @RequestParam必須要加上引數名
阿新 • • 發佈:2019-01-24
一、使用方式
看網上資料學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必須要加上引數名