代码之家  ›  专栏  ›  技术社区  ›  Bozho

如何在springmvc3.0中注册处理程序拦截器?

  •  18
  • Bozho  · 技术社区  · 16 年前

    应该很简单:

    <bean id="handlerMapping"
       class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="myInterceptor" />
            </list>
        </property>
    </bean>
    

    但这样就不会调用拦截器。

    5 回复  |  直到 16 年前
        1
  •  29
  •   skaffman    16 年前

    默认情况下,Spring将注册 BeanNameUrlHandlerMapping ,和 DefaultAnnotationHandlerMapping

    如果你定义你自己的 HandlerMapping

    到目前为止,还不错。

    当你加上 <mvc:annotation-driven/> 声明自己的 ,它将替换默认值。然而,如果你也声明了你自己的一个,那么你最终会得到两个。由于它们是按申报的先后顺序查阅的,所以这通常是指由 <mvc:annotation-driven/>

    如果 DefaultAnnotationHandler映射 注册人 <mvc:annotation-driven/> 就像默认的一样,也就是说,如果显式声明的优先,但是他们不是这样写的。

    我现在的偏好是不使用 <mvc:annotation-driven/> 总之,当与其他配置选项混合使用时,它太混乱,也太不可预测。它实际上没有做任何特别复杂的事情,显式地添加它为您所做的事情并不困难或冗长,最终结果更容易理解。

        2
  •  13
  •   Swapnil Vargaonkar    14 年前

    我面临的问题 :Spring MVC标记与DefaultAnnotationHandlerMapping的自定义定义不匹配。

    为什么?上面的答案很好地解释了原因。

    ? 我想为我的每个请求定义一个拦截器。一个Spring移动拦截器来确定用户代理..移动还是浏览器?

    mvc注释 ,我不能再使用DefaultAnnotationHandlerMapping了。

    解决方案 使用标记并在dispathcer-servlet.xml中注册拦截器bean :

    <mvc:interceptors>
     <!-- This runs for all mappings -->
         <bean  class="main.com.XXX.MobileDeviceResolverHanlderInterceptor"/>
    </mvc:interceptors>
    
        3
  •  9
  •   Bozho    16 年前

    这种行为的原因是 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping DispatcherServlet

    <init-param>
        <param-name>detectAllHandlerMappings</param-name>
        <param-value>false</param-value>
    </init-param>
    

    这使得dispatcherservlet只使用 handlerMapping 定义在 x-servlet.xml

    我不明白为什么这是默认行为。我期待着春天社区的答复。

        4
  •  6
  •   arviarya    13 年前

    <mvc:annotation-driven/> 因为我使用jackson来支持json,所以使用annotation。

    <mvc:interceptors> 在单独的“xml”文件(interceptor config.xml)中,并从我的x-dispatcher-servlet.xml导入它

    <import resource="interceptor-config.xml"/>
    

    它解决了我的问题,并避免了默认的“DefaultAnnotationHandlerMapping”bean出现在我的应用程序上下文中。

    以下是我的拦截器:

      <mvc:interceptors> 
             <mvc:interceptor>
                 <!-- Intercepting specific URL -->
                 <mvc:mapping path="/abc/**" />
                 <bean id= "myInterceptor" 
                     class="xx.xxx.xxx.MyInterceptor" />
             </mvc:interceptor>
    <mvc:interceptors>
    
        5
  •  3
  •   axtavt    16 年前

    在SpringMVC3.0中,您可以使用 <mvc:interceptors>