1

在 spring 3.0.x 中,我有一个处理程序方法,它的工作原理非常类似于:

@RequestMapping("/foo/{version:\\d+}/**")
public void handleVersionedResource(@PathVariable("version") Long version, HttpServletRequest request, HttpServletResponse response) {
     String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);

     // rest of the code maps path and version to a real resource and serves 
     // content with extra long cache control / expires headers
 }

在 3.0.x 中,ff 请求 url 是 /foo/12345/some/resource,然后 path = "some/resource"(请求匹配的 ** 部分)。

但是,在 3.1.x 中(尝试使用 3.1.0.RELEASE 和 3.1.1.RELEASE)路径 = 与完整请求路径匹配,因此在我之前的示例中为“/foo/12345/some/resource”。

所以问题是,有没有人有最简单的方法来复制我在 3.0.x 中得到的行为?此外,任何关于为什么这种行为发生变化的见解?我一开始做错了吗?

更新:重复Spring 3.1.RC1 和 PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE - 那里也没有给出好的答案。

4

1 回答 1

2

Spring 3.1.RC1 和 PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE表明 HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE 是 Spring 内部的,不应在您的应用程序中使用

做类似于如何匹配具有包含“/”的@pathVariable 的Spring @RequestMapping 的事情?可能是你最好的选择

于 2012-04-25T18:18:06.440 回答