我想使用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}前缀可能会导致此冲突。当然,我想保持这些路径不变。
由于
答案 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) {...}