[解決済み] Spring MVCの@ResponseBodyメソッドがStringを返すときにHTTP 400エラーで応答するにはどうすればよいですか?
2022-03-23 15:46:33
質問
Spring MVCを使用して、シンプルなJSON APIを作成しています。
@ResponseBody
というようなベースのアプローチ。(すでにJSONを直接生成するサービス層を持っています)。
@RequestMapping(value = "/matches/{matchId}", produces = "application/json")
@ResponseBody
public String match(@PathVariable String matchId) {
String json = matchService.getMatchJson(matchId);
if (json == null) {
// TODO: how to respond with e.g. 400 "bad request"?
}
return json;
}
質問ですが、与えられたシナリオの中で HTTP 400 エラーで応答する最もシンプルでクリーンな方法は何ですか? ?
というようなアプローチには出会いましたが。
return new ResponseEntity(HttpStatus.BAD_REQUEST);
...しかし、私のメソッドの戻り値の型はStringであり、ResponseEntityではないので、ここでは使えません。
どうすればいいですか?
戻り値の型を
ResponseEntity<>
とすると、以下のように400になります。
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
そして正しいリクエストのために
return new ResponseEntity<>(json,HttpStatus.OK);
アップデイト1
spring 4.1以降では、ResponseEntityにヘルパーメソッドがあり、以下のように使用することができます。
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
そして
return ResponseEntity.ok(json);
関連
-
java.util.NoSuchElementException 原因解析と解決方法
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
プロジェクトの依存関係を解決できなかった 解決
-
Methodのinvokeメソッド実装のJavaリフレクション
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
HttpClientがGZIP形式でない場合の対処法
-
java 例外。Javaツールの初期化
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ファインバグタイプ
-
プロローグでのコンテンツは禁止されています
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
javaでクラスを作成すると、enclosing classでないように見える
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について