标签:blog 上下文 删除 variable 参数 智能 问题 res att
一、问题描述
一个控制器提供RESTful访问信息:
@RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}") public ModelAndView getBlah(@PathVariable String blahName, HttpServletRequest request, HttpServletResponse response) {
遇到的问题是如果我用具有特殊字符的路径变量打到服务器,它将被截断。例如:http://localhost:8080/blah-server/blah/get/blah2010.08.19-02:25:47
参数blahName将为blah2010.08,但是request.getRequestURI()的调用包含传入的所有信息。那么如何防止Spring截断@PathVariable?
二、解决方案
(A)最佳方案
尝试@RequestMapping参数的正则表达式:
RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName:.+}")
(B)次佳解决方案
这可能与SPR-6164密切相关。简而言之,框架尝试将一些智能应用于URI解释,删除它认为是文件扩展名。因为它认为.19-02:25:47是一个文件扩展名,所以这样会使blah2010.08.19-02:25:47变成blah2010.08。
如链接问题中所述,您可以通过在应用程序上下文中声明自己的DefaultAnnotationHandlerMapping bean并将其useDefaultSuffixPattern属性设置为false来禁用此行为。这将覆盖默认行为,并阻止它骚扰您的数据。
(C)第三种解决方案
Spring认为最后一个点后面的任何东西都是一个文件扩展名,如.json或.xml,并截断它以检索你的参数。
所以如果你有/{blahName}:
如果您根据建议将映射更改为/{blahName:.+},则任何点(包括最后一个)将被视为参数的一部分:
标签:blog 上下文 删除 variable 参数 智能 问题 res att
原文地址:http://www.cnblogs.com/moonandstar08/p/7078263.html