我可以将/ **通配符放在请求映射的中间,例如:“/ 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
我该怎么做?
答案 0 :(得分:9)
我认为不可能根据需要在url映射中使用该ant样式,因为它会在下一个路径分隔符' / '上停止。
我建议您尝试16.3.2.2. URI Template Patterns with Regular Expressions以便仅映射请求的最后部分(尚未尝试此方法)。
您还可以使用 PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE 匹配请求的其余部分,并在那里应用一些表达式。 Check this post.
否则,您应该使用请求参数来匹配该条件16.3.2.6. Request Parameters and Header Values。
您可以通过请求参数条件缩小请求匹配,例如“myParam”,“!myParam”或“myParam = myValue”。前两个测试请求参数presense / absence,第三个测试特定参数值。以下是带有请求参数值条件的示例。
在这种情况下,您将使用params
映射类似的内容@RequestMapping(value = {"/some/resource/**"}, params="somthing")
或在方法签名中使用带有not required属性的注释请求参数:
public void test(@RequestParam(value = "somthing", required=false) String str) {