Spring請求問題之MissingServletRequestParameterException: Required xxx parameter ‘xxx’ is not present
這是最近我們專案組遇到的問題。專案組的同事和往常一樣寫程式碼,但是在測試的時候,發現傳遞的引數怎麼也獲取不到值。於是找我諮詢,然後我根據後臺的異常資訊和對應的程式碼指出了 @RequestParam 的用法問題。
首先我們根據錯誤提示資訊:“org.springframework.web.bind.MissingServletRequestParameterException: Required xxx parameter 'xxx' is not present”。MissingServletRequestParameterException 異常就是一個引數繫結異常。也就是說,你在 Controller 中寫的方法中用的 @RequestParam 指定的引數沒有獲取到。
@RequestParam 主要是用來繫結一個基本資料型別或 String 資料型別的引數。如果是一個物件,則不能使用 @RequestParam 來指定。因為物件的屬性不止一個。
@RequestParam 就相當於是 request.getParameter() 方法。
正常的用法如下:
1 2 3 |
|
錯誤資訊如下:
HTTP Status 400 – Required String parameter 'xttblog' is not present
@RequestParam 還有一個 required 屬性,當我們配置 required 引數後,上面的程式碼就不會報錯了。
通過 required=false 或者 required=true 來要求 @RequestParam 配置的前端引數是否一定要傳。required=false 表示不傳的話,會給引數賦值為 null,required=true 就是必須要有。
如果註解的引數是 int 基本型別,這時再用 required=false,就會報錯,因為不傳值,把 null 賦值給 int,肯定會報錯。具體的錯誤如下:
“Consider declaring it as object wrapper for the corresponding primitive type.”
要解決這個錯誤也很簡單。就是把基本資料型別改為包裝資料型別即可。如 int 改為 Integer。