如何在带有注释映射的Spring MVC中拥有不区分大小写的URLS
2022-09-01 04:35:40
我通过我的春季mvc Web应用程序进行了注释映射,效果很好,但是,它们区分大小写。我找不到使它们不区分大小写的方法。(我很想在Spring MVC中实现这一点,而不是以某种方式重定向流量)
我通过我的春季mvc Web应用程序进行了注释映射,效果很好,但是,它们区分大小写。我找不到使它们不区分大小写的方法。(我很想在Spring MVC中实现这一点,而不是以某种方式重定向流量)
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);
}
}
根据这个网络帖子,你需要在Spring MVC中添加HandlerMapping和HandlerAdapter。映射将请求映射到相应的控制器,适配器负责使用控制器执行请求。
因此,您需要覆盖映射器和适配器的 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的链接)