0

我正在使用 spring hatoas 创建休息服务。我有通过 REST API 公开的数据库实体。为简化起见,假设我有一个具有以下三个字段的实体。

  • id- 唯一标识符
  • service- 此项目所属的服务
  • value- 此项目的数字属性

我正在尝试实现以下 URL 架构:

@RequestMapping(value = "")- 返回所有项目的集合
@RequestMapping(value = "/{id}")- 使用此返回特定项目id @RequestMapping(value = "/{service}")- 使用此返回所有项目的集合service

这里的问题是第二条和第三条路径不明确,如果我尝试下面的 URL,Spring 不知道@RequestMapping要匹配哪个。

http://localhost/123

我该如何处理?

4

3 回答 3

3
@RequestMapping(value = "/{id}") 
@RequestMapping(value = "/service/{service}")

你没有很多选择吗?但是您也可以通过一些重构来查询参数。

@RequestMapping(value = "/{id}") 
public String myMethod(@RequestParam(value = "service") String service){}
于 2014-05-22T13:40:02.463 回答
1

这取决于将 id 与服务区分开来的原因。例如,如果 id 是一个数字,而 service 是一个字符串,则可以使用正则表达式,例如:

@RequestMapping(value = "/{id:\\d+}") 
@RequestMapping(value = "/{service:[a-zA-Z]+}")
于 2014-05-24T19:32:16.100 回答
1

由于您希望 `/{service} 返回具有指定服务的集合,因此更“正确”的方法可能是将其添加到您的“/”请求映射中作为查询参数。

@RequestMapping(value = "")
public CollectionResource getItems(@RequestParam(value = "service", required = false) String serviceType)

并使用类似的东西

http://localhost // return all
http://localhost/123 // return item with ID 123
http://localhost?service=abc // return all items with service abc
于 2014-05-22T15:15:23.697 回答