web-dev-qa-db-ja.com

Spring MVC-必須ではないと定義されているフィールドが欠落している場合のHTTPステータスコード400(不正な要求)

このコントローラーメソッドを使用したSpringMVCアプリケーションがあります。

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addNumber(@RequestParam(value="number", required=false) Long number) {
   ...
   return "redirect:/showAll/";
}

私のJSPには、上記のコントローラーメソッドに「number」という名前の値を投稿する標準のHTMLフォームがあります。ただし、値を省略して(テキストフィールドに何も入力しないでください)、POSTデータをコントローラーに送信すると、コントローラーメソッドが呼び出される前にブラウザーに表示されます

HTTP Status 400 - Required Long parameter 'number' is not present

ただし、コントローラーメソッドのアノテーションでは、「数値」パラメーターがnot必須として明確に定義されています。

誰かが何が起こっているのかについて少し考えていますか?

ありがとうございました。

PS:スローされている例外は次のとおりです。

org.springframework.web.bind.MissingServletRequestParameterException: Required Long parameter 'number' is not present

編集:これはSpring 3.2.3.RELEASEのバグです( ここを参照 )。バージョン3.1.4.RELEASEでは、この問題は発生しなくなりました。

7
AlexLiesenfeld

同じ状況に遭遇しました。これは、パラメーターが空の値でリクエストに存在する場合に発生します。

つまり、POST本文に "number ="(値が空の場合)が含まれている場合、Springはこの例外をスローします。ただし、リクエストにパラメータがまったく存在しない場合は、機能するはずです。エラーなし。

14
Yohan Liyanage