提问者:小点点

带有点(.)的spring MVC@PathVariable正在被截断


这是spring MVC@pathvariable被截断问题的继续

spring论坛声明,它已经修复(3.2版本)作为ContentNegotiationManager的一部分。请参阅以下链接。
https://jira.springsource.org/browse/spr-6164
https://jira.springsource.org/browse/spr-7632

在我的应用程序中,requestParameter with.com被截断。

谁能给我解释一下如何使用这个新功能吗?如何在XML中进行配置?

注:spring论坛-#1 spring MVC@PathVariable带点(.)正在被截断


共3个答案

匿名用户

据我所知,这个问题只出现在RequestMapping末尾的pathvariable。

我们可以通过在RequestMapping中定义regex addon来解决这个问题。

 /somepath/{variable:.+}

匿名用户

如果您使用的是spring 3.2.x和,请创建这个小的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" />

匿名用户

除了Martin Frey的答案之外,还可以通过在RequestMapping值中添加一个尾随斜杠来修复这个问题:

/path/{variable}/

请记住,此修复程序不支持可维护性。它现在要求所有URI都有一个尾随斜杠--这对于API用户/新开发人员来说可能并不明显。由于可能不是所有参数中都包含.,因此可能还会产生间歇性错误