分享

Spring MVC的restful获取文件名

 风中的眼睛_ 2014-04-21
我有一个控制器,可提供基于REST访问
@RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}")
public ModelAndView getBlah(@PathVariable String blahName, HttpServletRequest request,
       HttpServletResponse response) {

我遇到的问题是,如果我打的服务器路径变量有特殊字符它就会被截断。例如: 该会blah2010.08 但是,调用request.getRequestURI()包含了所有传入 任何想法如何预防春季从截断@PathVariable?
本文地址 :CodeGo.net/188291/ 

------------------------------------------------------------------------------------------------------------------------- 

1. 尝试使用正则表达式为@RequestMapping
RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName:.+}")



2. 这大概是密切相关的SPR-6164。简单地说,试图智慧应用到URI的解释,消除它认为是文件扩展名。这将有转弯的效果blah2010.08.19-02:25:47blah2010.08的,因为它认为.19-02:25:47是一个文件扩展名。 作为链接的问题描述,您可以通过声明自己禁用此行为DefaultAnnotationHandlerMapping豆在应用程序上下文,并设置其useDefaultSuffixPattern属性为false。这将覆盖默认行为,并停止它骚扰你的数据。 

3. 最后一个点后,一切都被解释为文件扩展名,默认情况下切断。 在Spring的XML配置,您可以添加DefaultAnnotationHandlerMapping并设置useDefaultSuffixPatternfalse(默认为true)。 所以,打开你的Spring XMLmvc-config.xml(或者不管它被称为),并添加
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
 <property name="useDefaultSuffixPattern" value="false" />
</bean>

现在你的@PathVariableblahName(和所有其他,太)应包含完整的,包括所有的点。 编辑:这里是一个链接到spring的api 

4. 我也碰到了这个问题,并且将该属性设置为false,没有任何。但是,该API说: 请注意,其中包括一个“XXX”后缀或结尾的路径以“/”已 将不使用在任何情况下,默认的后缀模式。 我尝试添加“/结束”我的REST风格的URL和问题就走了。我不是用讨好的解决方案,但它确实工作。 顺便说一句,我不知道他们什么时候加入这个“功能”,然后在默认情况下打开它什么spring的设计师的想法。 IMHO,它应该被删除。 

5. 我只是碰到了这一点,解决方案在这里没有一般工作如我所料。 我一个规划环境地政司的表达和多个映射,例如
@RequestMapping(method = RequestMethod.GET, 
 value = {Routes.BLAH_GET + "/{blahName:.+}", 
    Routes.BLAH_GET + "/{blahName}/"})



6. 我决定用这个技巧 1)增加了HttpServletRequest中的@PathVariable像下面
 @PathVariable("requestParam") String requestParam, HttpServletRequest request) throws Exception { 

2)直接获取的URL(在这个层面上没有截断)的请求
request.getPathInfo() <BR>

Spring MVC的@PathVariable以点(。)是越来越截断 

7. 文件扩展名问题只存在如果是在URL的最后一部分。变化
@RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}")

@RequestMapping(
 method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}/safe")

一切都会好起来, 

8. 如果你可以编辑请求被发送到地址,简单的解决办法是加上结尾的斜线给他们(和也在@RequestMapping值):
/path/{variable}/

这样的映射将如下所示:
RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}/")

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多