这是问题的延续
Spring MVC @PathVariable被截断
Spring论坛声明它已经固定(3.2版本)作为ContentNegotiationManager的一部分。请看下面的链接。
https://jira.springsource.org/browse/SPR-6164
https://jira.springsource.org/browse/SPR-7632
在我的应用程序中,带有。com的requestParameter被截断了。
谁能告诉我如何使用这个新功能?如何在xml中配置它?
注:春季论坛- #1
Spring MVC @PathVariable带点(.)会被截断
简单的解决方案:添加一个正则表达式{q:。+}在@RequestMapping
@RequestMapping("medici/james/Site")
public class WebSiteController {
@RequestMapping(value = "/{site:.+}", method = RequestMethod.GET)
public ModelAndView display(@PathVariable("site") String site) {
return getModelAndView(site, "web site");
}
}
现在,对于input /site/jamesmedice.com,“site”将显示正确的james's site
如果您正在使用Spring 3.2。x和<mvc:annotation-driven />,创建这个小BeanPostProcessor:
package spring;
public final class DoNotTruncateMyUrls implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof RequestMappingHandlerMapping) {
((RequestMappingHandlerMapping)bean).setUseSuffixPatternMatch(false);
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
然后把这个放在你的MVC配置xml中:
<bean class="spring.DoNotTruncateMyUrls" />
Spring 4的更新:从4.0.1开始,你可以使用PathMatchConfigurer(通过你的WebMvcConfigurer)。
@Configuration
protected static class AllResources extends WebMvcConfigurerAdapter {
@Override
public void configurePathMatch(PathMatchConfigurer matcher) {
matcher.setUseRegisteredSuffixPatternMatch(true);
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
}
}
在xml中,它是(https://jira.spring.io/browse/SPR-10163):
<mvc:annotation-driven>
[...]
<mvc:path-matching registered-suffixes-only="true"/>
</mvc:annotation-driven>