[解決済み] 空のRequestParamの値にdefaultValueを使用させることは可能ですか?
2022-06-23 13:53:12
質問
以下のようなリクエストマッピングがあった場合、どのように対応すればよいでしょうか?
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}
で、このリクエストを呼び出す。
http://example.com/test?i=
エラーメッセージが表示される
型 'java.lang.String' の値を型 'int' に変換することに失敗しました。ネストされた例外は java.lang.NumberFormatException です。入力文字列に対して: ""'です。
私は、javascriptクライアントが空のパラメータを送信するのを止めるか、文字列値を受け入れ、それらが空であることが判明しない場合にのみ解析することによって、これを解決することができます。
アップデイト : Springの後のバージョンでは、当初望まれた動作が実装されるようになりました。
spring 4.3.5でテストしてみたところ、この挙動は実際にNULL値をデフォルト値に変換し
NumberFormatException
を発生させることなく、NULL 値をデフォルト値に変換することがわかりました。
この動作の変更は、spring のどのバージョンで行われたのかはわかりません。
どのように解決するのですか?
RequestParamの型をIntegerに変更し、必須でないようにすることができます。この場合、リクエストは成功しますが、null になります。コントローラメソッドで明示的にデフォルト値を設定することができます。
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", required=false) Integer i) {
if(i == null) {
i = 10;
}
// ...
}
上の例では defaultValue を削除していますが、全く設定されていないリクエストを受け取ることが予想される場合は、これを含めるとよいでしょう。
http://example.com/test
関連
-
エラー java.util.NoSuchElementException
-
Dateが型に解決できない問題を解決する
-
javaの模造品QQ WeChatのチャットルーム
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
linux run jarfile Invalid or corrupt jarfile error.
-
java 例外。Javaツールの初期化
-
ローカルリソースのロードが許可されていない場合の解決策
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
Spring Boot による HTTPS アクセスの設定
-
Methodのinvokeメソッド実装のJavaリフレクション
-
Javaエラーメッセージがenclosingクラスでない
-
javaでよく使われる英単語
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。
-
テストが見つかりませんでした