1概要

この簡単な記事では、Spring MVCコントローラーからカスタムHTTPステータスコードを返すためのいくつかの方法を説明します。

これは、クライアントへのリクエストの結果をより明確に表現し、HTTPプロトコルの豊富なセマンティクスを完全に使用するために重要です。たとえば、リクエストに問題が発生した場合、考えられる問題の種類ごとに特定のエラーコードを送信すると、クライアントは適切なエラーメッセージをユーザーに表示できます。

基本的なSpring MVCプロジェクトの設定はこの記事の範囲外ですが、詳細なリンクは/spring-mvc-tutorial[こちら]にあります。


2カスタムステータスコードを返す

Springは、

Controller

クラスからカスタムステータスコードを返すためのいくつかの基本的な方法を提供します。


  • ResponseEntity

    を使う

  • 例外クラスに

    @ ResponseStatus

    アノテーションを使用する。


  • @ ControllerAdvice

    および

    @ ExceptionHandler

    アノテーションを使用する。

これらのオプションは相互に排他的ではありません。それとはかけ離れて、彼らは実際にお互いを補完することができます。

この記事では、最初の2つの方法(

ResponseEntity



@ ResponseStatus

)について説明します。

@ ControllerAdvice

および

@ ExceptionHandler

の使用方法についてもっと知りたい場合は、そのリンクについて読むことができます。


2.1.

ResponseEntity


を介してステータスコードを返す

標準のSpring MVCコントローラでは、単純なマッピングを定義します。

@RequestMapping(value = "/controller", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity sendViaResponseEntity() {
    return new ResponseEntity(HttpStatus.NOT__ACCEPTABLE);
}



/controller

“へのGETリクエストを受信すると、Springは406 Code(Not Acceptable)でレスポンスを返します。この例では、特定のレスポンスコードを任意に選択しました。任意のHTTPステータスコードを返すことができます(完全なリストはhttps://en.wikipedia.org/wiki/List

of

HTTP

status

codes[ここ]にあります)。


2.2. 例外を介してステータスコードを返す


Exception

を使用してステータスコードを返す方法を示すために、コントローラに2番目のメソッドを追加します。

@RequestMapping(value = "/exception", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity sendViaException() {
    throw new ForbiddenException();
}



/exception

”に対するGETリクエストを受け取ると、Springは

ForbiddenException

をスローします。これは独自の例外で、別のクラスで定義します。

@ResponseStatus(HttpStatus.FORBIDDEN)
public class ForbiddenException extends RuntimeException {}

この例外ではコードは必要ありません。すべての作業は

@ ResponseStatus

アノテーションによって行われます。

この場合、例外がスローされると、それをスローしたコントローラは応答コード403(禁止)で応答を返します。必要に応じて、レスポンスと一緒に返されるメッセージを注釈に追加することもできます。

この場合、クラスは次のようになります。

@ResponseStatus(value = HttpStatus.FORBIDDEN, reason="To show an example of a custom message")
public class ForbiddenException extends RuntimeException {}

例外から任意のステータスコードを返すことは技術的には可能ですが、ほとんどの場合、エラーコード(4XXおよび5XX)に例外を使用することは論理的な意味をなすだけです。


3結論

チュートリアルでは、Spring MVCコントローラからカスタムステータスコードを返す方法を示しました。

実装はhttps://github.com/eugenp/tutorials/tree/master/spring-rest-simple[GitHubプロジェクトの例]にあります。