Springの@ResponseStatusを使ってHTTPステータスコードを設定する
1.はじめに
Spring MVCでは、HTTPレスポンスのステータスコードを設定する方法がたくさんあります。
この短いチュートリアルでは、最もわかりやすい方法、つまり@ @ ResponseStatus__アノテーションを使用する方法を説明します。
2.コントローラメソッドについて
エンドポイントが正常に戻ると、SpringはHTTP 200(OK)応答を返します。
コントローラメソッドの応答ステータスを指定したい場合は、そのメソッドに[email protected]というマークを付けることができます。希望する応答ステータスには、交換可能な2つの引数があります。 ://developer.mozilla.org/en-US/docs/Web/HTTP/Status/418[これはティーポットであるため、サーバーがコーヒーの製造を拒否したことを示します]
@ResponseStatus(HttpStatus.I__AM__A__TEAPOT)
void teaPot() {}
エラーを知らせたいときは、
reason
引数を通してエラーメッセージを送ることができます。
@ResponseStatus(HttpStatus.BAD__REQUEST, reason = "Some parameters are invalid")
void onIllegalArgumentException(IllegalArgumentException exception) {}
reason
を設定すると、Springは
HttpServletResponse.sendError()
を呼び出します。そのため、
HTMLエラーページがクライアントに送信されるため、RESTエンドポイントには適していません
。
また、Springは、マークされたメソッドが正常に完了した場合(
Exception
をスローせずに)、
@ ResponseStatus
のみを使用することに注意してください。
3.エラーハンドラ付き
Exception
をHTTP応答ステータスに変換するために
@ ResponseStatus
を使用する方法は3つあります。
-
ExceptionHandler__を使う -
@ ControllerAdvice
を使う -
Exception
クラスをマークする
最初の2つの解決策を使うためには、エラーハンドラメソッドを定義しなければなりません。このトピックの詳細については、リンク:/exception-handler-for-rest-for-spring[この記事]を参照してください。
これらのエラーハンドラメソッドで
@ ResponseStatus
を使用することができます。
動的なエラー応答が必要ない場合、最も簡単な解決策は3つ目です。Exceptionクラスに
@ ResponseStatusを付ける:
@ResponseStatus(code = HttpStatus.BAD__REQUEST)
class CustomException extends RuntimeException {}
Springがこの
Exception
を受け取ると、
@ ResponseStatus
で指定した設定を使用します。
Exception
クラスを
@ ResponseStatus
でマークすると、Springは常に
HttpServletResponse.sendError()を呼び出します(
reason__を設定するかどうかにかかわらず)。
また、Springでは、サブクラスにも
@ ResponseStatus
のマークを付けない限り、同じ設定を使用しています。
4.まとめ
この記事では、
@ ResponseStatus
を使用して、エラー処理を含むさまざまなシナリオでHTTP応答コードを設定する方法を説明しました。
いつものように、例はhttps://github.com/eugenp/tutorials/tree/master/spring-mvc-java[over on GitHub]から入手可能です。