我正在使用SpringMVC实现一个REST API。在某个时刻,我需要有一个分层的URI:
/文件夹/id/children/id/children/。。。id/children
深度可变。使用RestEasy可以递归地从top方法返回Resource。有什么方法可以在SpringMVC中实现它吗?否则你对此有什么建议吗?
关键是子项id仅在同一级别上是唯一的,因此:文件夹不会有两个具有相同id的子项,但在整个树中,将存在几个具有相同id。
任何帮助都将不胜感激。
我认为没有一种很好的方法可以用Spring实现这一点。我能想到两种选择,但都有点难看。。。
-
编写单独的控制器方法来捕获您将遇到的URI模式的每个"深度",例如
@RequestMapping("/children/{id1}/children/{id2}")
。然后,您可以调用一个通用方法来处理捕获的id
,该方法可以是递归的。如果最大"深度"只有3,我可能会选择这个选项,因为代码至少对其他开发人员来说很容易阅读/grok,并且拷贝量很大;粘贴将是最小的。 -
在
@RequestMapping("/children/{restOfUrl:+}")
模板模式中使用regex(请参阅文档),并在单个String变量中捕获整个路径。然后,你需要自己的逻辑来拆分重复单元。这是一个不太灵活的工具(捕获从/children/
和@RequestMapping
中的:+
开始的所有内容很容易被遗漏,这使得其他人更难计算出哪些URI与哪些控制器方法一起使用