【问题标题】:Spring 3.1.RC1 and PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTESpring 3.1.RC1 和 PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
【发布时间】:2011-11-04 06:52:37
【问题描述】:

张贴在spring forum 没有回应。

我有以下代码 sn-p(来自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.RC1folder 变量为/browse

这是一个错误还是在 spring-3.1 中发生了一些变化?

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    正如 skaffman 所说,您可能不应该使用 PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE。查看How to match a Spring @RequestMapping having a @pathVariable containing "/"? 以获取使用AntPathMatcher 来完成您正在尝试的事情的示例

    【讨论】:

    • PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE一样,建议的备用BEST_MATCHING_PATTERN_ATTRIBUTE也是内部框架内部实现细节,预计不依赖。但是,它有效,因此我接受了答案。
    【解决方案2】:

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

    PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE 的 javadoc 说:

    注意:并非所有HandlerMapping 实现都支持此属性。基于 URL 的 HandlerMappings 通常会支持它,但处理程序不必期望此请求属性在所有场景中都存在。

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

    【讨论】:

    • 谢谢。我看过 javadoc 并意识到它是不可靠的。也许有人可以建议一个替代解决方案 - 本质上是一种在 REST 样式 URL 中指定文件夹名称的方法。从stackoverflow.com/questions/3686808/…得到这个@
    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 2012-05-10
    • 1970-01-01
    • 2012-10-16
    • 2015-09-01
    • 1970-01-01
    • 2012-03-06
    • 2012-05-12
    相关资源
    最近更新 更多