2014-02-15 49 views
2

我想一個Spring項目從XML轉換成Java的配置,並與HandlerInterceptors遇到了以下問題:Spring MVC中的HandlerInterceptor在Java中配置忽略

XML配置(作品):

<mvc:annotation-driven /> 
<mvc:interceptors> 
    <bean class="com.mycompany.MyHandlerInterceptor" /> 
</mvc:interceptors> 

爪哇配置(攔截器不會被調用)

@Configuration 
public class MvcConfig extends WebMvcConfigurationSupport { 

    @Override 
    protected void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(new MyHandlerInterceptor()); 
    } 

    // ... 
} 

根據文檔,這兩種配置應該是等價的,但在Java配置示例的NEI那麼前後處理方法是否被稱爲?

我錯過了什麼?

謝謝。

+0

這裏可以正常工作。您是否使用過調試器或在代碼中添加了跟蹤,以確保您的MvcConfig類已加載,並調用了addInterceptors方法? –

+0

@JBNizet是的。我在調用registry.addInterceptor()之前/之後添加了調試日誌記錄,並且它們都被擊中。 – WayneC

+0

嘗試將@EnableWebMvc添加到MvcConfig類。見http://stackoverflow.com/questions/10391988/in-spring-3-1-can-mvcinterceptors-be-used-in-conjunction-with-configuration –

回答

3

這是我自己的錯。我在我的MVC Java配置中覆蓋了requestMappingHandlerMapping(),並未在自定義HandlerMapping類上設置攔截器屬性。

@Bean 
@Override 
public RequestMappingHandlerMapping requestMappingHandlerMapping() { 
    CustomRequestHandlerMapping handlerMapping = new CustomRequestHandlerMapping(); 
    handlerMapping.setOrder(0); 
    handlerMapping.setInterceptors(getInterceptors()); // <-- This was missing 
    return handlerMapping; 
}