如何在带有注释映射的Spring MVC中拥有不区分大小写的URLS

我通过我的春季mvc Web应用程序进行了注释映射,效果很好,但是,它们区分大小写。我找不到使它们不区分大小写的方法。(我很想在Spring MVC中实现这一点,而不是以某种方式重定向流量)


答案 1

Spring 4.2 将支持不区分大小写的路径匹配。您可以按如下方式对其进行配置:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        AntPathMatcher matcher = new AntPathMatcher();
        matcher.setCaseSensitive(false);
        configurer.setPathMatcher(matcher);
    }
}

答案 2

根据这个网络帖子,你需要在Spring MVC中添加HandlerMappingHandlerAdapter。映射将请求映射到相应的控制器,适配器负责使用控制器执行请求。

因此,您需要覆盖映射器和适配器的 PathMatcher

Ex(将使所有@Controllers不区分大小写):

新匹配器:

public class CaseInsenseticePathMatcher extends AntPathMatcher {
    @Override
    protected boolean doMatch(String pattern, String path, boolean fullMatch, Map<String, String> uriTemplateVariables) {
        System.err.println(pattern + " -- " + path);
        return super.doMatch(pattern.toLowerCase(), path.toLowerCase(), fullMatch, uriTemplateVariables);
    }
}

应用上下文.xml:

<bean id="matcher" class="test.CaseInsenseticePathMatcher"/>

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="pathMatcher" ref="matcher"/>
</bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="pathMatcher" ref="matcher"/>
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"/>
    </property>
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
        </list>
    </property>
</bean>

<bean id="conversion-service" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"/>

添加了与<mvc:annotation-driven>相同的内容(感谢David Parks的链接)