24

仕事に行けなくて困って@ControllerAdviceいます。xml ファイルで 3.1 だった名前空間の場所を更新しました。コントローラーを含むクラスをコントローラーと同じパッケージに移動しました。3.2.0 リリース jar を使用しています。コントローラーコードに注釈を入れる@ExceptionHandlerと機能しますが、@ControllerAdvice. クラスが失敗する@ControllerAdviceと、キャッチされていない例外ハンドラー ビューが表示されます。これをトラブルシューティングする方法についてアイデアを持っている人はいますか?

4

7 に答える 7

18

クラスパス スキャンを使用する場合、おそらく<context:component-scan>要素に新しいインクルード フィルタを追加する必要があります。

<context:include-filter type="annotation" 
    expression="org.springframework.web.bind.annotation.ControllerAdvice" />

デフォルトのスキャンでは、spring-context-3.2.xsd for に従って、この注釈を検索しませんcomponent-scan

「Spring Bean として自動登録されるアノテーション付きコンポーネントのクラスパスをスキャンします。デフォルトでは、Spring 提供の @Component、@Repository、@Service、および @Controller ステレオタイプが検出されます。」

于 2013-09-24T20:56:23.697 に答える
9

この問題については、まず設定を確認します。

  1. component-scan 基本パッケージの下に @ControllerAdvice クラスがあることを確認する必要があります。
  2. <mvc:annotation-driven/>spring-servlet.xml で必ず使用してください。または @ControllerAdvice クラスに @EnableWebMvc を持っている

構成権限がある場合、ControllerAdvice は既に機能しているはずです。これで、キャッチされていない例外ハンドラー ビューを取得したと言いました。InegrationTest でそれを取得したと思います。mockMvc を使用してそれをテストしました。そうであれば、@WebAppConfiguration を配置して mokcMvc を次のようにビルドする必要があります。

 @Autowired
private WebApplicationContext wac;

mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();

WebApplicationContext がないため、standaloneSetup(controller) を使用しても機能しません。

于 2013-12-20T05:26:04.150 に答える
6

追加の構成は必要ありません。それはうまくいくはずです。詳細については、このリンクを参照してください。これは非常に簡単な例を提供します:

于 2013-10-14T15:37:45.800 に答える