1. 程式人生 > >Spring請求問題之MissingServletRequestParameterException: Required xxx parameter ‘xxx’ is not present

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

@RequestParam String xttblog 

// 下面的對傳入引數指定為 xttblog,如果前端不傳 xttblog 引數名,會報錯 

@RequestParam(value="xttblog") String xttblog

錯誤資訊如下:

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。