カテゴリ: Spring 更新日: 2026/02/02

Springの@ResponseStatusとResponseStatusExceptionの使い方を徹底解説!初心者向けHTTPステータス制御ガイド

@ResponseStatus と ResponseStatusException:HTTPステータスの付け方
@ResponseStatus と ResponseStatusException:HTTPステータスの付け方

教材紹介 Spring Boot 学習のおすすめ教材

Spring Bootを使ったWebアプリケーション開発を、 環境構築から実践まで一通り学びたい方には、 定評のある入門書が参考になります。

Spring Boot 3 プログラミング入門をAmazonで見る

※ Amazon広告リンク

先生と生徒の会話形式で理解しよう

生徒

「Springで例外が起きたときに、HTTPステータスを自分で指定したいんですけど、どうすればいいんですか?」

先生

「それなら、@ResponseStatusResponseStatusExceptionを使うと、簡単にステータスコードを設定できますよ。」

生徒

「それってどういう違いがあるんですか?使い分けも知りたいです!」

先生

「じゃあ、それぞれの特徴と使い方を詳しく見ていきましょう。」

1. SpringでHTTPステータスを制御する理由とは?

1. SpringでHTTPステータスを制御する理由とは?
1. SpringでHTTPステータスを制御する理由とは?

Webアプリケーション開発では、例外が発生した際に適切なHTTPステータスコードを返すことが重要です。Springでは、REST APIやMVCコントローラでのエラーレスポンスに404 Not Found400 Bad Requestなどのステータスを返すために、@ResponseStatusResponseStatusExceptionを活用します。

これにより、クライアント側での処理がわかりやすくなり、ユーザーエクスペリエンスやAPI設計の品質が向上します。

2. @ResponseStatusアノテーションの基本

2. @ResponseStatusアノテーションの基本
2. @ResponseStatusアノテーションの基本

@ResponseStatusは、Springで例外クラスにHTTPステータスコードを割り当てるためのアノテーションです。独自の例外クラスを作成して、そのクラスに対してステータスを指定します。

以下のように使います:


@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException(String message) {
        super(message);
    }
}

この例では、ResourceNotFoundExceptionが発生すると、自動的に404 Not Foundとしてクライアントに返されます。

3. @ResponseStatusを使ったコントローラ例

3. @ResponseStatusを使ったコントローラ例
3. @ResponseStatusを使ったコントローラ例

実際のSpring MVCコントローラでの使用例を見てみましょう。


@GetMapping("/user/{id}")
public String getUser(@PathVariable String id) {
    if (!userService.exists(id)) {
        throw new ResourceNotFoundException("ユーザーが見つかりませんでした");
    }
    return "user-detail";
}

このように、ビジネスロジックで条件をチェックし、該当しない場合に@ResponseStatus付きの例外をスローすることで、明確なエラー処理が実現できます。

4. ResponseStatusExceptionの基本と使い方

4. ResponseStatusExceptionの基本と使い方
4. ResponseStatusExceptionの基本と使い方

ResponseStatusExceptionは、例外クラスをわざわざ作らずに、任意のタイミングでステータスコードを動的に指定できる便利なクラスです。

例えば、以下のように記述できます:


@GetMapping("/product/{id}")
public String getProduct(@PathVariable String id) {
    if (!productService.exists(id)) {
        throw new ResponseStatusException(HttpStatus.NOT_FOUND, "商品が存在しません");
    }
    return "product-detail";
}

ResponseStatusExceptionはSpring 5から追加された仕組みで、より柔軟にHTTPエラーを返せるのが特徴です。

5. 独自メッセージ付きのエラーレスポンス

5. 独自メッセージ付きのエラーレスポンス
5. 独自メッセージ付きのエラーレスポンス

クライアントに対して、ステータスコードだけでなくエラーメッセージも返したい場合、ResponseStatusExceptionにメッセージを含めることで対応できます。これは、REST APIでのエラー診断に非常に役立ちます。

例えば:


throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "パラメータが不正です");

このように記述すれば、HTTPステータスが400で、メッセージとしてパラメータが不正ですがレスポンスボディに含まれるようになります。

6. ControllerAdviceと併用する方法

6. ControllerAdviceと併用する方法
6. ControllerAdviceと併用する方法

@ResponseStatusResponseStatusExceptionは単体でも使えますが、@ControllerAdvice@ExceptionHandlerを使って、アプリケーション全体の例外を一括管理することも可能です。

例えば、以下のように記述できます:


@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleNotFound(ResourceNotFoundException ex) {
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
    }
}

この方法では、HTTPステータスだけでなく、レスポンスボディやヘッダーもカスタマイズ可能です。

7. REST APIでのHTTPエラー制御の実践ポイント

7. REST APIでのHTTPエラー制御の実践ポイント
7. REST APIでのHTTPエラー制御の実践ポイント

Spring BootでREST APIを開発する際には、適切なHTTPステータスコードを返すことが非常に重要です。以下のポイントを意識しましょう。

  • リソースが見つからないときは404 Not Found
  • リクエストが不正なときは400 Bad Request
  • 権限がない場合は403 Forbidden
  • サーバー側の例外は500 Internal Server Error

これらを@ResponseStatusResponseStatusExceptionで適切に返すことで、API設計が明確になり、クライアント側のバグも減ります。

8. よくある失敗と注意点

8. よくある失敗と注意点
8. よくある失敗と注意点

初心者がよく陥るミスとして、「@ResponseStatusをつけ忘れていて、デフォルトで500 Internal Server Errorになってしまう」パターンがあります。

また、ResponseStatusExceptionを使う際に、HttpStatusnullになっていると例外の発火に失敗することがあります。

このようなトラブルを避けるためには、使用するステータスコードとその用途をしっかり理解しておくことが大切です。

カテゴリの一覧へ
新着記事
JavaのHttpSessionActivationListenerとは?初心者向けにセッションの移動をわかりやすく解説
JavaのHttpServletMapping.getPatternメソッドを完全解説!初心者にもわかるServletマッピングの取得方法
JavaのHttpServletMapping.getMatchValueの使い方を解説!初心者でもわかるServletのマッピング取得
JavaのHttpServletMappingインターフェースを徹底解説!Servletのマッピング情報を取得する方法
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.3
Java&Spring記事人気No3
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.4
Java&Spring記事人気No4
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.5
Java&Spring記事人気No5
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.6
Java&Spring記事人気No6
Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定
No.7
Java&Spring記事人気No7
SpringのModelクラスの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理

💻 作業効率アップに

長時間のコーディングでも疲れにくい♪ 静音ワイヤレスマウス

Logicool Signature M750 を見る

※ Amazon広告リンク