カテゴリ: Spring 更新日: 2026/01/25
PR
独学でJavaを学んでいる方向け
「実務レベルに到達できるか不安」「1人だと詰まることが多い」場合は、 実践重視で学べる環境を一度確認しておくのも一つの手です。
EBAエデュケーション |学習内容・サポートを見る

Springの@ControllerAdviceと@ExceptionHandlerの使い方を完全ガイド!初心者でもわかる例外処理の基本

@ControllerAdvice と @ExceptionHandler:グローバル例外ハンドリングの実装
@ControllerAdvice と @ExceptionHandler:グローバル例外ハンドリングの実装

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

生徒

「Springでコントローラーの処理中にエラーが起きたとき、全部にtry-catchを書かないといけないんですか?」

先生

「それは大変ですよね。でもSpringには共通の例外処理を一箇所にまとめられる@ControllerAdviceという便利な仕組みがあります。」

生徒

「それって、全体のエラーハンドリングが簡単になるってことですか?」

先生

「そうなんです。さらに、@ExceptionHandlerと組み合わせると、例外の種類ごとに丁寧な対応ができますよ。詳しく見ていきましょう!」

1. Springの例外処理とは?初心者向けにわかりやすく解説

1. Springの例外処理とは?初心者向けにわかりやすく解説
1. Springの例外処理とは?初心者向けにわかりやすく解説

Spring Frameworkでは、アプリケーション中で発生する例外(エラー)を効率よく処理する方法として、@ControllerAdvice@ExceptionHandlerを使った「グローバル例外処理」がよく使われます。これは、全体のコントローラーに共通する例外処理を一元化し、メンテナンス性の向上コードの簡略化に役立ちます。

例えば、Webアプリケーションでユーザーが存在しないIDを指定してアクセスしたときや、バリデーションエラーが起きたときに、それぞれ適切なエラーメッセージを返す処理が可能です。

2. @ControllerAdviceの基本と役割

2. <code>@ControllerAdvice</code>の基本と役割
2. @ControllerAdviceの基本と役割

@ControllerAdviceは、複数の@Controllerに共通する処理をまとめるためのアノテーションです。例外処理だけでなく、バインディングエラーの処理なども扱えますが、今回は例外処理に特化して解説します。

グローバルなエラーハンドリングを実現するには、以下のようにクラスに@ControllerAdviceを付けて定義します。


@ControllerAdvice
public class GlobalExceptionHandler {
    // 例外ハンドラをここに記述
}

このクラス内に@ExceptionHandlerを使ったメソッドを定義することで、アプリ全体の例外を一箇所で処理できます。

PR

将来を見据えて、+αのスキルを身につけたい方へ

JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。

AIを学ぶならアイデミープレミアム

3. @ExceptionHandlerで例外をキャッチする方法

3. <code>@ExceptionHandler</code>で例外をキャッチする方法
3. @ExceptionHandlerで例外をキャッチする方法

@ExceptionHandlerは、特定の例外クラスに対する処理を記述するためのアノテーションです。たとえば、IllegalArgumentExceptionが発生したときに、指定したメソッドが呼ばれるようにできます。


@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<String> handleIllegalArgument(IllegalArgumentException ex) {
    return ResponseEntity.badRequest().body("不正なリクエストです:" + ex.getMessage());
}

上記のように記述すれば、例外に応じたエラーメッセージを返すことが可能です。

4. 例外ごとに異なるレスポンスを返す方法

4. 例外ごとに異なるレスポンスを返す方法
4. 例外ごとに異なるレスポンスを返す方法

たとえば「リソースが存在しない場合」と「入力値が間違っていた場合」とでは、返すHTTPステータスやメッセージを変えたいですよね。そのようなケースでも@ExceptionHandlerは柔軟に対応できます。


@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleNotFound(ResourceNotFoundException ex) {
    return ResponseEntity.status(HttpStatus.NOT_FOUND).body("リソースが見つかりません:" + ex.getMessage());
}

このようにすることで、HTTP 404 Not Found を返せるようになります。

5. 共通フォーマットのエラーレスポンスを作る

5. 共通フォーマットのエラーレスポンスを作る
5. 共通フォーマットのエラーレスポンスを作る

フロントエンドやAPI連携で一貫性のあるエラー形式を返すことは重要です。JSON形式のレスポンスを返すことで、エラー処理がしやすくなります。


@ExceptionHandler(Exception.class)
public ResponseEntity<Map<String, String>> handleGenericException(Exception ex) {
    Map<String, String> response = new HashMap<>();
    response.put("error", "予期しないエラーが発生しました");
    response.put("details", ex.getMessage());
    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
}

6. 実践!@ControllerAdvice@ExceptionHandlerの組み合わせ例

6. 実践!<code>@ControllerAdvice</code>と<code>@ExceptionHandler</code>の組み合わせ例
6. 実践!@ControllerAdvice@ExceptionHandlerの組み合わせ例

ここまでの知識を使って、実際にグローバルな例外処理を実装してみましょう。例えば、以下のようにカスタム例外とハンドラを組み合わせます。


public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(String message) {
        super(message);
    }
}

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFound(UserNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body("ユーザーが見つかりません:" + ex.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleOther(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("内部エラー:" + ex.getMessage());
    }
}

7. REST APIと組み合わせて使うコツ

7. REST APIと組み合わせて使うコツ
7. REST APIと組み合わせて使うコツ

@RestControllerと組み合わせると、レスポンスボディに直接エラーメッセージを返すことができます。JSONでエラーデータを構造化して返すと、クライアント側の処理が楽になります。

また、ResponseEntityを活用することで、ステータスコードとメッセージの一貫性が保てます。

8. よくあるミスと注意点

8. よくあるミスと注意点
8. よくあるミスと注意点

@ControllerAdviceはSpring MVCのコンポーネントスキャンの対象に入っていないと動作しません。@ComponentScanの範囲に入れておくことを確認しましょう。

また、例外がハンドルされずにスルーされてしまう場合は、@ExceptionHandlerの引数となる例外クラスが一致しているかを再確認してください。

9. HTMLエラーページを返したい場合

9. HTMLエラーページを返したい場合
9. HTMLエラーページを返したい場合

APIではなくWeb画面でエラーを表示したい場合は、ModelAndViewを使ってHTMLテンプレートに遷移させることも可能です。


@ExceptionHandler(RuntimeException.class)
public ModelAndView handleRuntime(RuntimeException ex) {
    ModelAndView mv = new ModelAndView("error");
    mv.addObject("message", ex.getMessage());
    return mv;
}

このように書けば、エラー時にerror.htmlなどのテンプレートに遷移できます。

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

Spring Framework超入門をAmazonで見る

※ Amazonアソシエイト・プログラムを利用しています

カテゴリの一覧へ
新着記事
PR

JavaやLinuxの検証環境に
低コストで使えるVPS

JavaのEnumとcompareToメソッドを完全ガイド!初心者でもわかるjava.langパッケージの基礎
Spring Data JPAのfindAllメソッドの使い方を完全ガイド!検索結果をThymeleafのth:eachで表示
Thymeleafのth:valueの使い方を解説!フォーム入力値を保持したり動的に表示する方法
JavaのSecureRandomクラスの使い方を完全ガイド!初心者でもわかるセキュアな乱数生成
PR 未経験からITエンジニアを目指す方へ

Javaを学んでいるけど、「このまま未経験で就職できるか不安」という20代向け。 学歴不問・無料サポートの就職支援という選択肢があります。

Tamesy |無料で面談予約
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.3
Java&Spring記事人気No3
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.4
Java&Spring記事人気No4
Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定
No.5
Java&Spring記事人気No5
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得
No.6
Java&Spring記事人気No6
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.7
Java&Spring記事人気No7
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.8
Java&Spring記事人気No8
JavaのEnumクラスのordinalメソッドを徹底解説!初心者でもわかる列挙型の順序番号
PR

ローカルPCに依存しない開発環境という選択肢

Java・Linuxの検証や学習環境を、クラウド上ですぐに用意できます。

Java入門

Javaの基礎を体系的に学びたい場合は、文法だけでなく 「なぜそう書くのか」まで丁寧に解説されているため、 初心者でも理解しやすい定番の1冊です。

スッキリわかるJava入門 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Java実践

ジェネリクス、enum、シールクラスなどの型設計から、 関数型プログラミング(ラムダ式・Stream API)、 JVM制御やリフレクション、外部ライブラリの活用までを扱っており、 「Javaを使えるレベル」へ進むための内容が網羅されています。

スッキリわかるJava入門 実践編 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Spring入門

Spring Frameworkの全体像から、 Webアプリ開発で必要となる主要機能までを 体系的に解説している定番の入門書です。

Spring徹底入門 第2版 Spring FrameworkによるJavaアプリケーション開発

※ 紙の書籍・電子書籍どちらでも購入できます

PR 実務経験のあるエンジニア向け

Javaなどの実務経験があり、次のキャリアを検討している方向け。 IT・ゲーム業界に特化した転職支援サービスという選択肢もあります。

転職ボックス |IT・ゲーム業界専門