我正在尝试将 Spring 项目从 XML 转换为 Java 配置,但在 HandlerInterceptors 方面遇到了以下问题:
XML 配置(有效):
<mvc:annotation-driven />
<mvc:interceptors>
<bean class="com.mycompany.MyHandlerInterceptor" />
</mvc:interceptors>
Java Config(拦截器从未被调用)
@Configuration
public class MvcConfig extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyHandlerInterceptor());
}
// ...
}
根据文档,这两个配置应该是等效的,但是在Java配置示例中,前置或后处理方法都没有被调用?
我错过了什么?
谢谢。
最佳答案
这是我自己的错。我在 MVC Java 配置中重写了 requestMappingHandlerMapping()
,并且没有在自定义 HandlerMapping
类上设置拦截器属性。
@Bean
@Override
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
CustomRequestHandlerMapping handlerMapping = new CustomRequestHandlerMapping();
handlerMapping.setOrder(0);
handlerMapping.setInterceptors(getInterceptors()); // <-- This was missing
return handlerMapping;
}
关于Java 配置中忽略 Spring MVC HandlerInterceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21799566/