このコントローラーメソッドを使用した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では、この問題は発生しなくなりました。
同じ状況に遭遇しました。これは、パラメーターが空の値でリクエストに存在する場合に発生します。
つまり、POST本文に "number ="(値が空の場合)が含まれている場合、Springはこの例外をスローします。ただし、リクエストにパラメータがまったく存在しない場合は、機能するはずです。エラーなし。