1. 序章

Spring MVCでは、HTTP応答のステータスコードを設定する方法がたくさんあります。

この短いチュートリアルでは、@ResponseStatusアノテーションを使用するという最も簡単な方法を説明します。

2. コントローラメソッドについて

エンドポイントが正常に戻ると、SpringはHTTP 200(OK)応答を提供します。

指定したい場合コントローラ方式の応答状態 、そのメソッドを次のようにマークできます @ResponseStatus。 目的の応答ステータスについて、2つの交換可能な引数があります。 コード、価値。 たとえば、 ティーポットであるため、サーバーがコーヒーの淹れ方を拒否していることを示します

@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から入手できます。