15

我可以将 /** 通配符放在请求映射的中间,例如:“/some/resource/**/somthing”

在 Spring 3 中,我可以做到这一点

@RequestMapping("/some/resource/**")

映射

/some/resource/A  -> ControllerMethod1
/some/resource/A/B -> ControllerMethod1
/some/resource/A/B/C/D/E/F -> ControllerMethod1

对于任意数量的路径部分

但是这个映射太贪心了,不允许我将子 URL 映射@RequestMapping("/some/resource/**/somthing")到另一个控制器,例如

/some/resource/A/somthing  -> ControllerMethod2
/some/resource/A/B/somthing -> ControllerMethod2
/some/resource/A/B/C/D/E/F/somthing -> ControllerMethod2

我怎样才能做到这一点?

4

1 回答 1

12

我认为不可能按照您的需要在 url 映射中使用那种 ant 样式,因为它会在下一个路径分隔符“ / ”处停止。

我建议你试试16.3.2.2。带有正则表达式的 URI 模板模式,以便仅映射请求的最后一部分(尚未尝试过这种方法)。

您也可以使用PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE匹配请求的其余部分,并在那里应用一些表达式。检查这篇文章。

否则,您应该使用请求参数来匹配该条件16.3.2.6。请求参数和标头值

您可以通过“myParam”、“!myParam”或​​“myParam=myValue”等请求参数条件来缩小请求匹配范围。前两个测试请求参数是否存在,第三个测试特定参数值。这是一个带有请求参数值条件的示例。

在这种情况下,您将使用参数映射类似的东西

@RequestMapping(value = {"/some/resource/**"},  params="somthing")

或在方法签名中使用带有不需要属性的注释请求参数:

public void test(@RequestParam(value = "somthing", required=false) String str) {
于 2013-11-14T15:44:38.137 回答