アノテーションインターフェース ControllerAdvice


@TargetSE(TYPESE) @RetentionSE(RUNTIMESE) @DocumentedSE @Component public @interface ControllerAdvice
複数の @Controller クラス間で共有される @ExceptionHandler@InitBinder@ModelAttribute メソッドを宣言するクラスの @Component の特殊化。

@ControllerAdvice アノテーションが付けられたクラスは、Spring Bean として明示的に宣言するか、クラスパススキャンを介して自動検出できます。このような Bean はすべて、Ordered セマンティクスまたは @Order/@PriorityEE 宣言に基づいてソートされ、Ordered セマンティクスが @Order / @Priority 宣言よりも優先されます。次に、@ControllerAdvice Bean が実行時にこの順序で適用されます。ただし、PriorityOrdered を実装する @ControllerAdvice Bean は、Ordered を実装する @ControllerAdvice Bean よりも優先されないことに注意してください。さらに、Ordered は、スコープ付き @ControllerAdvice Bean には適用されません。たとえば、そのような Bean がリクエストスコープまたはセッションスコープの Bean として構成されている場合などです。例外を処理するために、@ExceptionHandler は、一致する例外ハンドラーメソッドを使用して最初のアドバイスで選択されます。モデル属性とデータバインディングの初期化の場合、@ModelAttribute メソッドと @InitBinder メソッドは @ControllerAdvice の順序に従います。

メモ: @ExceptionHandler メソッドの場合、特定のアドバイス Bean のハンドラーメソッドの中で、現在の例外の原因を単に一致させるよりも、ルート例外の一致が優先されます。ただし、優先度の高いアドバイスの原因の一致は、優先度の低いアドバイスの Bean の一致よりも優先されます(ルートレベルまたは原因レベルのいずれか)。結果として、優先ルートアドバイス Bean に対応する順序でプライマリルート例外マッピングを宣言してください。

デフォルトでは、@ControllerAdvice のメソッドはすべてのコントローラーにグローバルに適用されます。annotations()basePackageClasses()basePackages()(またはそのエイリアス value())などのセレクターを使用して、対象のコントローラーのより狭いサブセットを定義します。複数のセレクターが宣言されている場合は、ブール OR ロジックが適用されます。つまり、選択されたコントローラーは少なくとも 1 つのセレクターと一致する必要があります。セレクターチェックは実行時に実行されるため、多くのセレクターを追加すると、パフォーマンスに悪影響を及ぼし、複雑さが増す可能性があることに注意してください。

導入:
3.2
作成者:
Rossen Stoyanchev, Brian Clozel, Sam Brannen
関連事項:
  • 要素の詳細

    • name

      Component.value() のエイリアス。
      導入:
      6.1
      デフォルト:
      ""
    • value

      @AliasFor("basePackages") StringSE[] value
      basePackages() 属性のエイリアス。

      より簡潔なアノテーション宣言を可能にします。— たとえば、@ControllerAdvice("org.my.pkg") は @ControllerAdvice(basePackages = "org.my.pkg") と同等です。

      導入:
      4.0
      関連事項:
      デフォルト:
      {}
    • basePackages

      @AliasFor("value") StringSE[] basePackages
      基本パッケージの配列。

      これらの基本パッケージまたはそのサブパッケージに属するコントローラーが含まれます。たとえば、@ControllerAdvice(basePackages = "org.my.pkg") または @ControllerAdvice(basePackages = {"org.my.pkg", "org.my.other.pkg"}) です。

      value() はこの属性のエイリアスであり、アノテーションをより簡潔に使用できるようにします。

      文字列ベースのパッケージ名の型安全な代替として basePackageClasses() を使用することも検討してください。

      導入:
      4.0
      デフォルト:
      {}
    • basePackageClasses

      ClassSE<?>[] basePackageClasses
      @ControllerAdvice アノテーション付きクラスによって通知されるコントローラーを選択するパッケージを指定するための、basePackages() の型安全な代替。

      この属性によって参照される以外の目的を果たさない特別なノーオペレーションマーカークラスまたはインターフェースを各パッケージに作成することを検討してください。

      導入:
      4.0
      デフォルト:
      {}
    • assignableTypes

      ClassSE<?>[] assignableTypes
      クラスの配列。

      指定された型の少なくとも 1 つに割り当て可能なコントローラーは、@ControllerAdvice アノテーション付きクラスによって通知されます。

      導入:
      4.0
      デフォルト:
      {}
    • annotations

      ClassSE<? extends AnnotationSE>[] annotations
      アノテーション型の配列。

      提供されたアノテーション型の少なくとも 1 つでアノテーションが付けられたコントローラーは、@ControllerAdvice アノテーション付きクラスによって通知されます。

      カスタム構成アノテーションの作成を検討するか、@RestController などの事前定義アノテーションを使用してください。

      導入:
      4.0
      デフォルト:
      {}