仕事に行けなくて困って@ControllerAdvice
います。xml ファイルで 3.1 だった名前空間の場所を更新しました。コントローラーを含むクラスをコントローラーと同じパッケージに移動しました。3.2.0 リリース jar を使用しています。コントローラーコードに注釈を入れる@ExceptionHandler
と機能しますが、@ControllerAdvice
. クラスが失敗する@ControllerAdvice
と、キャッチされていない例外ハンドラー ビューが表示されます。これをトラブルシューティングする方法についてアイデアを持っている人はいますか?
7 に答える
クラスパス スキャンを使用する場合、おそらく<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 ステレオタイプが検出されます。」
この問題については、まず設定を確認します。
- component-scan 基本パッケージの下に @ControllerAdvice クラスがあることを確認する必要があります。
<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) を使用しても機能しません。
追加の構成は必要ありません。それはうまくいくはずです。詳細については、このリンクを参照してください。これは非常に簡単な例を提供します: