Spring笔记-@PathVariable遇到.(点号)参数被截断的问题

在使用SpringMVC@PathVariable
注解的时候发现一个问题,就是如果参数中有.点号,那么参数会被截断。

@Controller
@RequestMapping("/example")
public class ExampleController{

    @RequestMapping("/{param}")
    public void test(@PathVariable("param")String param){
        System.out.println(param);
    }
}

对于不同的url,@PathVariable得到的参数为:

/example/test          => text
/example/test.ext      => text
/example/test.ext.ext2 => text.ext

可以看出路径参数中最后一个.以及之后的文本被截断了。

这个问题有两种结局方案:

第一种方法是在 @PathVariable
中指定参数的正则规则:

@Controller
@RequestMapping("/example")
public class ExampleController{

    @RequestMapping("/{param:.+}")
    public void test(@PathVariable("param")String param){
        System.out.println(param);
    }
}

这样 param
参数批量的规则是 .+
,也就是一个或者一个以上的所有字符。这样Spring就不会截断参数了。

这个方法在Spring3/4中都适用,但不是一个完美的方法,因为你需要修改每一个使用 @PathVariable
的地方。

第二种方法是添加一个配置,指定让Spring不处理 @PathVariable
的点号:

@Configuration
protected static class AllResourcesextends WebMvcConfigurerAdapter{
    @Override
    public void configurePathMatch(PathMatchConfigurer matcher){
        matcher.setUseRegisteredSuffixPatternMatch(true);
    }
}
<mvc:annotation-driven>
    [...]
    <mvc:path-matchingregistered-suffixes-only="true"/>
</mvc:annotation-driven>

这个方法支持Spring4。

原文 

http://mushanshitiancai.github.io/2017/12/21/java/spring/Spring笔记-PathVariable遇到-点号-参数被截断的问题/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Spring笔记-@PathVariable遇到.(点号)参数被截断的问题

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址