首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring MVC @PathVariable被截断

Spring MVC @PathVariable被截断
EN

Stack Overflow用户
提问于 2010-08-20 05:44:56
回答 11查看 77.2K关注 0票数 143

我有一个控制器,它提供对信息的RESTful访问:

代码语言:javascript
复制
@RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}")
public ModelAndView getBlah(@PathVariable String blahName, HttpServletRequest request,
                            HttpServletResponse response) {

我遇到的问题是,如果我用带有特殊字符的path变量访问服务器,它会被截断。例如:http://localhost:8080/blah-server/blah/get/blah2010.08.19-02:25:47

参数blahName为blah2010.08

但是,对request.getRequestURI()的调用包含传入的所有信息。

你知道如何防止Spring截断@PathVariable吗?

EN

回答 11

Stack Overflow用户

发布于 2010-08-20 06:03:42

尝试使用正则表达式作为@RequestMapping参数:

代码语言:javascript
复制
RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName:.+}")
票数 151
EN

Stack Overflow用户

发布于 2010-08-20 07:04:44

这可能与SPR-6164密切相关。简而言之,该框架试图对URI解释应用一些智能,删除它认为是文件扩展名的内容。这将产生将blah2010.08.19-02:25:47转换为blah2010.08的效果,因为它认为.19-02:25:47是一个文件扩展名。

如链接问题中所述,您可以通过在应用程序上下文中声明自己的DefaultAnnotationHandlerMapping bean并将其useDefaultSuffixPattern属性设置为false来禁用此行为。这将覆盖默认行为,并阻止它干扰您的数据。

票数 59
EN

Stack Overflow用户

发布于 2010-10-22 23:35:58

最后一个点之后的所有内容都会被解释为文件扩展名,默认情况下会被截断。

在spring config xml中,您可以添加DefaultAnnotationHandlerMapping并将useDefaultSuffixPattern设置为false (缺省值为true)。

所以打开spring xml mvc-config.xml (或者不管它叫什么)并添加

代码语言:javascript
复制
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="useDefaultSuffixPattern" value="false" />
</bean>

现在,您的@PathVariable blahName (以及所有其他)应该包含包含所有点的全名。

编辑:这是一个link to the spring api

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3526523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档