我有一个控制器,它提供对信息的RESTful访问:
@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吗?
发布于 2010-08-20 06:03:42
尝试使用正则表达式作为@RequestMapping
参数:
RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName:.+}")
发布于 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
来禁用此行为。这将覆盖默认行为,并阻止它干扰您的数据。
发布于 2010-10-22 23:35:58
最后一个点之后的所有内容都会被解释为文件扩展名,默认情况下会被截断。
在spring config xml中,您可以添加DefaultAnnotationHandlerMapping
并将useDefaultSuffixPattern
设置为false
(缺省值为true
)。
所以打开spring xml mvc-config.xml
(或者不管它叫什么)并添加
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="useDefaultSuffixPattern" value="false" />
</bean>
现在,您的@PathVariable
blahName
(以及所有其他)应该包含包含所有点的全名。
编辑:这是一个link to the spring api
https://stackoverflow.com/questions/3526523
复制相似问题