Springの@ResponseStatusを使ってHTTPステータスコードを設定する

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です。