如何避免Spring的@RequestMapping路径冲突?

时间:2014-04-18 12:29:56

标签: java spring rest path conflict

我想使用Spring定义REST API。我有这两个@Controller方法:

@RequestMapping(value = "/{machineId}/workspaces/{workspaceId}", method = RequestMethod.DELETE)
public void removeWorkspace(@PathVariable String machineId, @PathVariable String workspaceId {...}

@RequestMapping(value = "/{machineId}", method = RequestMethod.DELETE)
public void removeVM(@PathVariable String machineId) {...}

问题是,这个定义导致路径冲突:如果我试图调用

curl -X DELETE http://localhost/machine-1/workspaces/workspace-1

我希望,应该调用“removeWorkspace”,但问题是,调用“removeVM”。有人知道如何避免这种冲突吗? {machineId}前缀可能会导致此冲突。当然,我想保持这些路径不变。

由于

2 个答案:

答案 0 :(得分:1)

这是一个修复的错误,同时在版本4.1-RC2中修复,请参阅此JIRA SPR-10576以获取更多详细信息。

因此,在当前版本中修复它的唯一方法是更改​​URL路径,或手动应用修补程序。

答案 1 :(得分:0)

您可以尝试使用正则表达式来解释@RequestMapping(value = "/{machineId}", method = RequestMethod.DELETE)不匹配的http://localhost/machine-1/workspaces/workspace-1

我之前没有尝过这个,但也许它适合你:

  @RequestMapping(value = "/{machineId:[^/]*}", method = RequestMethod.DELETE)
  public void removeVM(@PathVariable String machineId) {...}