Spring@ResponseStatusを使用してHTTPステータスコードを設定する
1. 序章
Spring MVCでは、HTTP応答のステータスコードを設定する方法がたくさんあります。
この短いチュートリアルでは、@ResponseStatusアノテーションを使用するという最も簡単な方法を説明します。
2. コントローラメソッドについて
エンドポイントが正常に戻ると、SpringはHTTP 200(OK)応答を提供します。
指定したい場合コントローラ方式の応答状態 、そのメソッドを次のようにマークできます
@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. エラーハンドラー付き
@ResponseStatusを使用してExceptionをHTTP応答ステータスに変換する方法は3つあります。
- @ExceptionHandlerを使用
- @ControllerAdviceを使用
- 例外クラスのマーキング
最初の2つのソリューションを使用するには、エラーハンドラメソッドを定義する必要があります。 このトピックの詳細については、この記事を参照してください。
前のセクションで通常のMVCメソッドを使用した場合と同じように、これらのエラーハンドラメソッドで@ResponseStatusを使用できます。
動的エラー応答が必要ない場合、最も簡単な解決策は3番目の解決策です。 @ResponseStatus:でExceptionクラスをマークします。
@ResponseStatus(code = HttpStatus.BAD_REQUEST)
class CustomException extends RuntimeException {}
SpringがこのExceptionをキャッチすると、@ResponseStatusで提供された設定を使用します。
Exceptionクラスを@ResponseStatusでマークすると、Springは HttpServletResponse.sendError() 、を、[ X169X]理由かどうか。
また、 @ResponseStatus でマークしない限り、Springはサブクラスに同じ構成を使用することに注意してください。
4. 結論
この記事では、 @ResponseStatus を使用して、エラー処理を含むさまざまなシナリオでHTTP応答コードを設定する方法を説明しました。
いつものように、例はGitHubでから入手できます。