

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
controlleradviceとは
controlleradvice とは Spring Framework の機能のひとつで、複数のコントローラに対して共通の処理をまとめて適用する仕組みです。正式名称は @ControllerAdvice というアノテーションを使いますが、日本語の解説ではコントローラに対する助言的な意味合いから「controlleradvice」として語られることもあります。この記事では初心者にもわかりやすい言葉で、基本的な考え方と実践的な使い方を紹介します。
なぜ controlleradvice が必要か
ウェブアプリケーションではエラーハンドリングやデータの整形といった処理を、複数のコントローラにまたいで共通に行う場面がよくあります。個々のコントローラに同じコードを繰り返すと、保守性が低下し、修正漏れの原因にもなります。controlleradvice を使えば、共通の例外処理、共通のモデルデータ、共通のデータバインディング設定などを「一か所」に集約でき、コードの重複を減らせます。
基本的な使い方
基本はシンプルです。まず、クラスに @ControllerAdvice を付けます。次に、そのクラスの中にメソッドを置き、@ExceptionHandler、@ModelAttribute、@InitBinder などのアノテーションを使います。@ExceptionHandler は全コントローラで発生する例外を捕捉して共通の処理を実行します。@ModelAttribute は複数のコントローラにまたがってモデルにデータを自動追加するのに便利です。@InitBinder はデータの変換ルールを統一して、リクエストパラメータのバインド時の挙動を制御します。
実践的な使い方のイメージ
実務での典型的なシナリオをいくつか挙げます。 ・全体の例外を一つのメソッドで処理して、同じエラーメッセージを返す。 ・全コントローラのモデルに共通のデータを追加して、ビュー側での表示を統一する。 ・リクエストのバインディング時に、特定のデータ形式の検証や変換を一括で設定する。
これらを組み合わせることで、コードの見通しが良くなり、新しいコントローラを追加しても同じ挙動を維持できます。実際の開発では、ControllerAdvice のクラスは通常、アプリケーションの設定領域に置かれ、各コントローラを変更することなく挙動を変更できる点が大きな利点です。
ポイントと注意点
以下の表は controlleradvice の要点を短く整理したもの。
| ポイント | 共通処理の一元化、保守性の向上、コードの重複削減 |
|---|---|
| 主な機能 | @ExceptionHandler、@ModelAttribute、@InitBinder の組み合わせ |
| 使い方の流れ | ControllerAdvice クラスを作成 → アノテーション付きメソッドを追加 → 全コントローラに適用 |
| 注意点 | 過度に多機能にしすぎるとデバッグが難しくなる可能性がある。適切な範囲に留め、ログを活用することが重要。 |
注意点と実務のコツ
第一に、ControllerAdvice の適用範囲を明確に設定することが重要です。全てのコントローラに適用するのが最も簡単ですが、場合によっては特定のパッケージだけに絞るなどの工夫が必要です。次に、例外処理はユーザーにとって意味のあるメッセージを返すことを心がけましょう。技術的なエラーメッセージをそのまま返すと、セキュリティ上のリスクや混乱を招くことがあります。最後に、デバッグ用のログ出力を適切に行い、どのルートでどの例外が処理されたかを追跡できるようにしておくと、後からの保守が楽になります。
controlleradviceの同意語
- ControllerAdvice
- Spring MVC における横断的処理を定義するクラス/概念。複数のコントローラに共通して適用される処理をまとめて実装できる。
- @ControllerAdvice
- 全コントローラに適用される共通処理を宣言するためのアノテーション。ControllerAdvice の実体を示す。
- グローバル例外処理
- 全コントローラで発生する例外を一元的に捕捉・処理する仕組み。
- 全コントローラ共通処理
- 複数のコントローラに共通して適用する処理をひとまとめに管理する発想。
- モデル属性のグローバル追加
- 全コントローラのモデルに対して、共通のモデル属性を自動で追加する機能(@ModelAttribute の横断適用)。
- InitBinder のグローバル設定
- 全コントローラで利用されるデータバインド設定を共通化する機能。
- 例外ハンドラ
- ControllerAdvice 内に定義し、特定の例外を処理するメソッドの総称。
- アドバイス(横断的処理)
- AOP 的な“アドバイス”の一種として、コントローラ群に跨る処理を提供する概念。
- グローバルなデータバインド初期化
- 全コントローラで共通に適用するデータバインドの初期設定のこと。
controlleradviceの対義語・反対語
- コントローラ
- 意味: 各リクエストを個別に処理する役割を持つクラス。ControllerAdviceのように全体へ横断的な処理を適用するのではなく、特定のコントローラやエンドポイントごとに責任を持つ。
- ローカル例外ハンドラ
- 意味: 各コントローラ内で直接例外を捕捉して対処する仕組み。ControllerAdviceの『全体一括処理』に対して、局所的な例外処理。
- 個別処理クラス
- 意味: それぞれのエンドポイントに対して個別に実装される処理。横断的な関心事はなく、特定ケースにのみ適用される。
- 局所処理クラス
- 意味: 局所的(特定のコントローラ・機能に限定)なビジネス処理を担うクラス。全体横断機能ではない点が対義。
- 横断的関心なし
- 意味: アプリ全体に跨る関心事(例外処理・共通モデル変換など)を持たない状態。ControllerAdviceのような横断機能の反対のイメージ。
- アノテーションなしコントローラ
- 意味: 明示的な横断機能を示すアノテーションを使わず、通常のコントローラとして振る舞う構造。横断的機能が適用されない前提の例。
- 具体的エンドポイント実装クラス
- 意味: 具体的なエンドポイントごとに実装されたクラス。横断的な処理よりも個別の処理を重視する立場。
- ルーティング専用クラス
- 意味: ルーティング(どのエンドポイントがどの処理に繋がるか)だけを担うクラス。エラーハンドリングや横断的関心を担当しない。
- 個別エラーハンドラ
- 意味: 個別のエンドポイントごとに用意したエラーハンドリング。ControllerAdviceのグローバルな例外処理の対局。
controlleradviceの共起語
- Spring
- JavaのWebアプリケーション開発を支える総合フレームワーク。ControllerAdviceはSpring MVCの機能の一部です。
- Spring Boot
- Springを手軽に使えるようにする起動と設定の枠組み。ControllerAdviceはBootアプリにも適用されます。
- Spring MVC
- SpringのWeb MVCアーキテクチャ。ControllerAdviceはこのMVCの全体設定・例外処理を補助します。
- Controller
- @Controllerが付くクラスで、HTTPリクエストを処理します。
- RestController
- REST API向けのコントローラー。返却値を自動的にJSONなどに変換します。
- ControllerAdvice
- @ControllerAdviceアノテーションを付けたクラスで、全体に適用される例外処理・データバインドの共通設定を提供します。
- RestControllerAdvice
- @RestController向けのControllerAdvice。REST API向けのエラーレスポンス生成を補助します。
- ExceptionHandler
- 特定の例外を処理するためのメソッドに付けるアノテーション。
- InitBinder
- リクエストデータのバインド挙動をカスタマイズするメソッドに付けるアノテーション。
- ModelAttribute
- モデルにデータを追加したり、リクエストパラメータをモデルへ結びつけるアノテーション。
- GlobalExceptionHandler
- アプリ全体の例外処理をまとめたクラス。ControllerAdviceと組み合わせて使われます。
- ResponseEntity
- HTTPレスポンスの本体・ステータスを柔軟に組み立てられるSpringの型。
- HttpStatus
- HTTPのステータスコードを表す列挙型(例:200、404、500)
- MethodArgumentNotValidException
- リクエストの検証エラー時に発生する代表的な例外の一つ。
- HttpMessageNotReadableException
- リクエストボディが読み取れない場合に発生する例外。
- BindingResult
- 検証結果を保持するオブジェクト。エラーメッセージの取得に使われます。
- Validation
- 入力データの正当性を検証する仕組み。エラーレスポンスの整形にも関係します。
- WebRequest
- リクエスト情報を抽象化したSpringのインターフェース。例外処理時に利用されることがあります。
- NativeWebRequest
- WebRequestの実装形。ServletWebRequestなどを含みます。
- ErrorAttributes
- Spring Bootがエラー情報を格納・提供するクラス。カスタムエラーレスポンス作成時に参照されます。
- HttpServletRequest
- Servlet APIのリクエスト情報を表すオブジェクト。ExceptionHandlerのパラメータとして使われます。
- HttpServletResponse
- Servlet APIのレスポンス情報を表すオブジェクト。エラーレスポンスの構築に使われます。
- ResponseBody
- @ResponseBodyアノテーションで、メソッドの返り値をレスポンスボディとして返します。
- ResponseStatus
- @ResponseStatusで特定のHTTPステータスを指定するアノテーション。
- AOP
- アスペクト指向プログラミングの概念。ControllerAdviceは横断的関心事の実現に近い考え方を提供します。
- Cross-cutting concerns
- 横断的関心事のこと。エラーハンドリングやデータバインドはその代表例で、ControllerAdviceが有効です。
controlleradviceの関連用語
- ControllerAdvice
- Spring MVC の機能で、複数のコントローラに共通の処理を適用できるクラス。例外処理、モデル属性の追加、InitBinder の設定などをまとめて提供します。
- ExceptionHandler
- 特定の例外クラスを捕捉して独自の処理を行うメソッド。@ControllerAdvice 内で使われ、返すレスポンスをカスタマイズできます。
- InitBinder
- データバインディング時に使うエディタやフォーマットを登録する仕組み。グローバルに適用したい場合は ControllerAdvice 内で定義します。
- ModelAttribute
- コントローラのモデルに属性を追加して、ビューやレスポンスに共通データを与えるための機能です。
- RestController
- @Controller と @ResponseBody を組み合わせ、REST API の返却形式を自動的に JSON などのボディにします。
- ResponseEntityExceptionHandler
- Spring が用意する例外処理の基底クラス。ExceptionHandler の組み合わせとともに、例外を ResponseEntity へ変換して返します。
- ResponseStatus
- @ResponseStatus アノテーションで、特定の例外やメソッドに対して HTTP ステータスを設定します(例: 400 Bad Request)。
- MethodArgumentNotValidException
- @Valid などの検証エラーが発生したときに投げられる例外。BindingResult でエラー内容を取得します。
- BindingResult
- 検証エラーの詳細を保持するオブジェクト。コントローラの引数に @Valid を使う場合にエラー情報を参照できます。
- ResponseBodyAdvice
- 全レスポンスのボディをグローバルに加工・整形するためのインタフェース。ControllerAdvice と併用して使われます。
- ErrorAttributes
- Spring Boot のデフォルトのエラー情報を構造化して返すための属性。/error に返すエラー payload をカスタマイズできます。
- GlobalExceptionHandler
- アプリ全体の例外を一元的に処理するクラス。通常は @ControllerAdvice で実装します。
- WebRequest
- リクエスト情報を抽象化して扱う Spring のインターフェース。ExceptionHandler でリクエストデータを参照する際に使われます。



















