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

Javaの@ControllerAdviceアノテーションを完全ガイド!初心者でもわかるエラーハンドリングの基本

Springの@ControllerAdviceアノテーション
Springの@ControllerAdviceアノテーション

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

生徒

「Javaで、アプリケーション全体の例外を一元管理する方法ってありますか?」

先生

「それについては、@ControllerAdviceアノテーションを使うと良いですよ。これを使うことで、コントローラーのエラーハンドリングを中央集中的に管理できます。」

生徒

「なるほど!具体的にはどうやって使うんですか?」

先生

「それでは、@ControllerAdviceアノテーションの使い方とその活用法について詳しく見ていきましょう!」

1. @ControllerAdviceアノテーションとは?

1. @ControllerAdviceアノテーションとは?
1. @ControllerAdviceアノテーションとは?

@ControllerAdviceは、Spring Frameworkの一部で、コントローラー層全体に対して例外処理を集中管理できるようにするアノテーションです。このアノテーションを使うことで、個別のコントローラーでエラーハンドリングを行うのではなく、アプリケーション全体で一貫したエラーハンドリングができるようになります。
主に、例外を捕捉してエラーメッセージをカスタマイズしたり、特定のエラーコードを返したりする際に利用します。

2. @ControllerAdviceアノテーションの基本的な使い方

2. @ControllerAdviceアノテーションの基本的な使い方
2. @ControllerAdviceアノテーションの基本的な使い方

@ControllerAdviceは、通常、専用のクラスに付与されます。このクラスでは、@ExceptionHandlerアノテーションを使って、発生する可能性のある例外をキャッチし、適切な処理を行います。以下に、@ControllerAdviceを使った基本的な例を示します。


import org.springframework.http.HttpStatus;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public String handleException(Exception e, Model model) {
        model.addAttribute("errorMessage", e.getMessage());
        return "errorPage";  // エラーページにリダイレクト
    }
}

上記のコードでは、@ControllerAdviceを使ってグローバルな例外処理を実現しています。@ExceptionHandler(Exception.class)により、アプリケーション全体で発生するExceptionをキャッチし、handleExceptionメソッドでエラーメッセージをモデルに追加して、専用のエラーページを表示する仕組みです。

PR

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

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

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

3. エラーハンドリングをもっと柔軟に

3. エラーハンドリングをもっと柔軟に
3. エラーハンドリングをもっと柔軟に

@ControllerAdviceでは、エラーハンドリングをさらに柔軟に設定できます。例えば、複数の異なる例外に対して異なるエラーメッセージを表示することも可能です。以下にその例を示します。


import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class AdvancedExceptionHandler {

    @ExceptionHandler(NullPointerException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleNullPointerException(NullPointerException e) {
        return "Null Pointer Error: " + e.getMessage();
    }

    @ExceptionHandler(ArithmeticException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleArithmeticException(ArithmeticException e) {
        return "Arithmetic Error: " + e.getMessage();
    }
}

こちらのコードでは、NullPointerExceptionArithmeticExceptionを個別に処理しています。異なるエラーメッセージを返すことで、ユーザーにとってわかりやすいエラー情報を提供することができます。

4. @ControllerAdviceを使った入力検証エラーの処理

4. @ControllerAdviceを使った入力検証エラーの処理
4. @ControllerAdviceを使った入力検証エラーの処理

@ControllerAdviceは、バリデーションエラーにも活用できます。たとえば、フォームの入力値に対するエラーメッセージを集中管理することが可能です。以下のコードは、@Validアノテーションを使って入力値の検証を行い、エラーが発生した場合にそのエラーメッセージを表示する例です。


import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class ValidationErrorHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleValidationException(MethodArgumentNotValidException e, Model model) {
        BindingResult result = e.getBindingResult();
        model.addAttribute("errorMessage", result.getAllErrors());
        return "validationErrorPage";  // 入力エラー専用ページ
    }
}

このコードでは、MethodArgumentNotValidExceptionというバリデーションエラーをキャッチし、エラーの詳細をモデルに追加して専用のエラーページにリダイレクトしています。このように、@ControllerAdviceを使うことで、入力エラーを効率的に処理できます。

5. @ControllerAdviceのポイントと注意点

5. @ControllerAdviceのポイントと注意点
5. @ControllerAdviceのポイントと注意点

@ControllerAdviceを使うことで、アプリケーション全体で統一的なエラーハンドリングができますが、以下の点に注意する必要があります。
1. すべての例外を一元管理すると、アプリケーションがどの例外でエラーを発生させているのかを見つけにくくなることがあります。エラーハンドリングは適切に分けて管理しましょう。
2. 例外を適切に捕捉し、エラーメッセージをカスタマイズしてユーザーにわかりやすい情報を提供することが大切です。

6. まとめ

6. まとめ
6. まとめ

この記事では、JavaのSpring Frameworkにおける@ControllerAdviceアノテーションについて詳しく解説しました。@ControllerAdviceを使うことで、アプリケーション全体で一貫したエラーハンドリングが可能になります。これにより、個々のコントローラーで例外を処理する手間を省き、エラーハンドリングを中央集中的に管理できるようになります。
具体的には、@ExceptionHandlerを使って例外をキャッチし、適切なエラーメッセージやレスポンスを返すことができます。また、@ControllerAdviceを使うことで、入力値の検証エラーや、特定のエラーに対して柔軟に対応することも可能です。これにより、ユーザーにとって分かりやすいエラーメッセージを提供することができます。
さらに、エラーハンドリングを集中管理することによって、メンテナンス性も向上し、コードの重複を避けることができます。ただし、注意点として、全ての例外を一元管理する場合、エラーの発生箇所を特定するのが難しくなることもあるため、適切に管理することが重要です。
@ControllerAdviceをうまく活用することで、エラーハンドリングが簡素化され、エラー処理を効果的に行うことができます。

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

生徒

「先生、@ControllerAdviceアノテーションについてよくわかりました。エラーハンドリングをアプリケーション全体で集中管理することで、コードの重複がなくなるし、メンテナンスも楽になりますね。」

先生

「その通りです!@ControllerAdviceを使うと、エラー処理を一元化できるので、コードがスッキリして、エラーが発生した際にもユーザーにわかりやすいメッセージを返せるようになりますよ。」

生徒

「それに、エラーメッセージをカスタマイズできるのもいいですね。例えば、NullPointerExceptionArithmeticExceptionを個別に処理できるので、ユーザーに具体的なエラー内容を伝えられます。」

先生

「はい、その通りです!それぞれのエラーに対して適切なメッセージを表示することで、ユーザーが問題を理解しやすくなります。@ControllerAdviceは、エラーハンドリングを効率的に行うための強力なツールです。」

生徒

「ありがとうございます、@ControllerAdviceを使ってエラーハンドリングを統一すれば、より良いアプリケーションが作れそうです。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

JavaのSpring Frameworkで@ControllerAdviceとは何ですか?

@ControllerAdviceは、Spring Frameworkでエラーハンドリングをアプリケーション全体に適用できるアノテーションです。個別のコントローラーに書かなくても、共通の例外処理を一か所でまとめて管理できます。

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

Spring Framework超入門をAmazonで見る

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

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

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

Thymeleafのth:blockの使い方を完全ガイド!初心者でもわかるテンプレートブロック管理
Thymeleafのth:selected属性の使い方を完全解説!初心者でもわかるセレクトボックス選択状態の指定方法
Spring MVCのルーティング設計をマスター!初心者向け@GetMappingと@PostMappingの基本と命名ルール
JSPのコメントタグとHTMLコメントの違いを徹底解説!初心者向けわかりやすい使い分け講座
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
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得
No.3
Java&Spring記事人気No3
JavaのIntegerクラスparseIntメソッド完全ガイド!初心者でもわかる文字列から数値変換
No.4
Java&Spring記事人気No4
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.6
Java&Spring記事人気No6
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
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・ゲーム業界専門