2012-11-27 126 views
8

我正在使用<mvc:annotation-driven/>,我想配置RequestMappingHandlerMapping禁用useTrailingSlashMatch。当我声明另一个RequestMappingHandlerMapping时,我将最终得到2 RequestMappingHandlerMapping。我如何配置RequestMappingHandlerMapping自定义弹簧3 mvc:注释RequestMappingHandlerMapping

回答

9

正如我们已经指出的那样,这是XML可行的去除mvc:annotation-driven并与整个XML等同替换:

<bean name="handlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="webBindingInitializer"> 
     <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> 
      <property name="conversionService" ref="conversionService"></property> 
      <property name="validator"> 
       <bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 
      </property> 
     </bean> 
    </property> 
    <property name="messageConverters"> 
     <list> 
      <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> 
      <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/> 
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> 
      <bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean> 
      <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean> 
      <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean> 
      <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean> 
     </list> 
    </property> 
</bean> 

<bean name="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> 
    <property name="useTrailingSlashMatch" value="true"></property> 
</bean> 
+0

它有效,但这么多重复不好 – scarba05

+3

不再适用于Spring 3.2 – ALOToverflow

0

将以下内容添加到您的弹簧配置文件中以切换useTrailingSlashMatch字段。

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> 
    <property name="useTrailingSlashMatch" value="true"> 
    </property> 
</bean> 
+4

我已经试过了。 'mvc:annotation-driven'正在创建另一个RequestMappingHandlerMapping。我已经在我的问题上说过了。 – Cemo

1

你能使用Java的配置尽量覆盖RequestMappingHandlerMapping

@Configuration 
@ComponentScan(basePackages = "base.package.name") 
public class WebAppConfig extends WebMvcConfigurationSupport { 

    @Override 
    @Bean 
    public RequestMappingHandlerMapping requestMappingHandlerMapping() { 
     RequestMappingHandlerMapping rmh = super.requestMappingHandlerMapping(); 
     rmh.setUseTrailingSlashMatch(false); 
     return rmh; 
    } 
} 
+1

我已经解决了通过编程的Java一个替换整个XML配置。但我也尝试过这个没有帮助我的。 – Cemo

+0

好的,Java配置为你工作;好。如果您有时间,请通过添加您的解决方案的详细信息更新该帖子。它将为即将到来的观众提供领导:) – jeevatkm

+1

其实,我有同样的意图。但我的解决方案并不是问题的答案。真正的解决方案必须基于xml配置。 – Cemo

1

如果您想要一个不涉及在Spring中复制功能的解决方案,那么您可以覆盖DisplatcherServlet。在Servlet 3.0容器中,这可能看起来像:

@WebServlet(name="spring-dispatcher", loadOnStartup=1, urlPatterns={"/"}, 
     initParams={ 
      @WebInitParam(name="contextConfigLocation", 
      value="/WEB-INF/spring/spring-dispatcher-servlet.xml")}) 
public class MyDispatcherServlet extends DispatcherServlet { 

    @Override 
    protected void initStrategies(ApplicationContext context) { 
     super.initStrategies(context); 
     for (RequestMappingInfoHandlerMapping handlerMapping 
       : BeanFactoryUtils.beansOfTypeIncludingAncestors(
        context, RequestMappingInfoHandlerMapping.class, true, false).values()) { 

      handlerMapping.setUseTrailingSlashMatch(false); 
     } 
    } 
} 
+0

我写了一篇关于此的博客文章http://www.scarba05.co.uk/blog/2013/03/configure-the-default -handlermapping提供的逐mvcannotation驱动式弹簧-3-2 / – scarba05