2011-11-04 78 views
1

发表于spring forum没有响应。Spring 3.1.RC1和PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE

我有以下代码片段(从here),这是我的pet project的一部分。

@Controller 
@RequestMapping("/browse") 
public class MediaBrowser { 
    ... 

    @RequestMapping("/**") 
    public final ModelAndView listContents(final HttpServletRequest request) { 

     String folder = (String) request.getAttribute(
       HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); 
       ... 
    } 

我访问以下网址:

http://localhost:8080/myapp/browse

  • 春天3.0.6.RELEASE,我得到了folder变量null,这是预期值。
  • 在弹簧3.1.RC1中,folder变量是/browse

这是一个bug或者在spring-3.1中有什么改变吗?

回答

3

正如skaffman所说,你可能不应该使用PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE。以How to match a Spring @RequestMapping having a @pathVariable containing "/"?为例,使用AntPathMatcher来完成您正在尝试的操作

+0

得到这一个像'PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE'一样,建议的备用'BEST_MATCHING_PATTERN_ATTRIBUTE'也是一个内部框架的内部实现细节,它是预计不会被依赖。然而,它的工作,所以我接受了答案。 – Raghuram

3

这看起来非常像框架的内部实现细节,你不应该依赖它。

PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE的Javadoc说:

注:不需要这个属性被所有HandlerMapping实现支持。基于URL的HandlerMappings通常会支持它,但处理程序不一定期望此请求属性在所有情况下都存在。

如果行为在3.0和3.1之间略有变化,我不会感到惊讶。

+0

谢谢。我看到了javadoc并意识到它是不可靠的。也许有人可以提出一个备用解决方案 - 本质上是一种在REST风格的URL中指定文件夹名称的方法。从http://stackoverflow.com/questions/3686808/spring-3-requestmapping-get-path-value – Raghuram