Spring @ResponseStatusを使用してHTTPステータスコードを設定する
1. 前書き
Spring MVCでは、set the status code of an HTTP responseに多くの方法があります。
この短いチュートリアルでは、最も簡単な方法、つまり@ResponseStatusアノテーションを使用する方法を説明します。
2. コントローラーメソッドについて
エンドポイントが正常に戻ると、SpringはHTTP 200(OK)応答を提供します。
response status of a controller methodを指定する場合は、そのメソッドを@ResponseStatus.でマークできます。これには、目的の応答ステータスに対して交換可能な2つの引数があります。code,とvalue.たとえば、次のようになります。 indicate that the server refuses to brew coffee because it is a teapot:
@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 error page to the client, which makes it a bad fit for REST endpointsを送信します。
また、Springはthe marked method completes successfullyの場合(Exceptionをスローせずに)、@ResponseStatusのみを使用することに注意してください。
3. エラーハンドラーあり
@ResponseStatusを使用してExceptionをHTTP応答ステータスに変換する方法は3つあります。
-
@ExceptionHandlerを使用
-
@ControllerAdviceを使用
-
Exceptionクラスのマーキング
最初の2つのソリューションを使用するには、エラーハンドラーメソッドを定義する必要があります。 このトピックの詳細については、this articleを参照してください。
前のセクションのこれらのエラーハンドラメソッドthe same way we did with regular MVC methodsで@ResponseStatusを使用できます。
動的エラー応答が必要ない場合、最も簡単な解決策は3番目の解決策です。つまり、Exceptionクラスを@ResponseStatus:でマークします。
@ResponseStatus(code = HttpStatus.BAD_REQUEST)
class CustomException extends RuntimeException {}
SpringがこのExceptionをキャッチすると、@ResponseStatusで提供した設定を使用します。
Exceptionクラスを@ResponseStatusでマークすると、reasonを設定するかどうかに関係なく、Springは常にHttpServletResponse.sendError(),を呼び出すことに注意してください。
また、@ResponseStatusでマークしない限り、Springはサブクラスに同じ構成を使用することに注意してください。
4. 結論
この記事では、@ResponseStatusを使用して、エラー処理を含むさまざまなシナリオでHTTP応答コードを設定する方法を説明しました。
いつものように、例は利用可能なover on GitHubです。