Spring请求映射通配符异常


问题内容

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

在spring3,我可以做到这一点

@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

我怎样才能做到这一点?


问题答案:

我认为无法按需要在网址映射中使用该ant样式,因为它将停止在下一个路径分隔符’ / ‘上。

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

您也可以使用 PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
匹配其余请求,并在其中应用一些表达式。

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

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

在这种情况下,您将使用params映射类似的内容

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

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

public void test(@RequestParam(value = "somthing", required=false) String str) {