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]から入手可能です。