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

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

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

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

生徒

「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になっていると例外の発火に失敗することがあります。

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

まとめ

まとめ
まとめ

今回はSpringにおけるHTTPステータス制御の基本として、ResponseStatusアノテーションとResponseStatusExceptionの使い方を体系的に整理しました。Spring BootやSpring MVCでREST APIを開発する際には、例外処理とHTTPステータスコードの設計が非常に重要です。単にエラーを発生させるだけではなく、クライアントに対して適切なHTTPステータスを返却することで、APIの可読性と保守性が大きく向上します。

ResponseStatusは例外クラスに直接HTTPステータスコードを付与できる仕組みであり、特定のビジネス例外を明確に分類したい場合に適しています。例えばリソース未存在時の例外や認可エラーなど、意味が固定された例外に対して活用することで、アプリケーション全体の設計が整理されます。一方でResponseStatusExceptionは、コントローラ内部で動的にHTTPステータスを指定できる柔軟な方法です。条件分岐の結果に応じてBadRequestやNotFoundを切り替えるようなケースでは特に有効です。

またControllerAdviceやExceptionHandlerと組み合わせることで、Springアプリケーション全体の例外処理を一元管理できます。これによりREST APIのエラーレスポンス形式を統一し、フロントエンドや外部クライアントとの連携を円滑に進められます。HTTPステータスコードの設計はAPI品質そのものに直結するため、四百番台と五百番台の違いを正確に理解し、状況に応じて使い分けることが重要です。

以下は、これまで学習した内容をまとめたサンプルプログラムです。ResponseStatusとResponseStatusExceptionを組み合わせた実装例として確認してください。


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

@RestController
@RequestMapping("/api")
public class SampleController {

    @GetMapping("/sample/{id}")
    public String getSample(@PathVariable String id) {

        if (id == null || id.isEmpty()) {
            throw new InvalidParameterException("識別子が未入力です");
        }

        if (id.equals("0")) {
            throw new ResponseStatusException(HttpStatus.NOT_FOUND, "対象データが存在しません");
        }

        return "正常に処理されました";
    }
}

上記のように設計することで、入力値の不正はBadRequestとして処理され、データ未存在はNotFoundとして返却されます。Spring BootでのREST API開発では、このようなHTTPステータス制御の考え方を理解しておくことが必須です。適切なエラーハンドリングはユーザー体験を高めるだけでなく、デバッグや保守運用の効率化にも直結します。


正常に処理されました

今回の内容を通して、Springの例外処理設計、HTTPステータスコード制御、ResponseStatusとResponseStatusExceptionの違い、ControllerAdviceとの連携方法までを一通り確認しました。これらを理解しておくことで、実践的なWebアプリケーション開発において堅牢なエラー処理を実装できるようになります。

先生と生徒の振り返り会話

生徒

今日はSpringのResponseStatusとResponseStatusExceptionの違いを学びました。HTTPステータスコードを正しく返すことがREST API設計で重要だと理解できました。

先生

その通りです。Spring BootでAPIを作る場合、例外処理とHTTPステータス制御は基本中の基本です。四百番台と五百番台の違いを説明できますか。

生徒

四百番台はクライアント側のリクエストに問題がある場合で、五百番台はサーバー内部のエラーでした。状況に応じてBadRequestやNotFoundを使い分ける必要があります。

先生

よく理解できていますね。ResponseStatusは例外クラスに固定的に付与する方法で、ResponseStatusExceptionは動的に指定できる方法でしたね。

生徒

はい。さらにControllerAdviceを使えばアプリケーション全体で例外を統一管理できることも分かりました。Spring MVCとREST API開発ではとても重要だと感じました。

先生

その理解があれば、実務でも通用します。HTTPステータスコードを正しく扱えるエンジニアは信頼されます。今日の内容を復習して、実際のプロジェクトでも活用していきましょう。

Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。

Spring Framework超入門をAmazonで見る

※ Amazon広告リンク

関連記事:
カテゴリの一覧へ
新着記事
New1
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Thymeleaf
Thymeleafのth:style属性を完全ガイド!初心者でもわかる動的スタイルの適用方法
更新記事
New4
Servlet
JavaのPart.getSubmittedFileNameメソッドの使い方を徹底解説!初心者でもわかるファイル名の取得方法
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.3
Java&Spring記事人気No3
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.4
Java&Spring記事人気No4
Spring
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.5
Java&Spring記事人気No5
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.6
Java&Spring記事人気No6
Java
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介

💻 作業効率アップに

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

Logicool Signature M750 を見る

※ Amazon広告リンク