我正在使用spring hateoas来创建一个休息服务。我有通过REST API公开的数据库实体。为了简化,假设我有一个具有以下三个字段的实体。
id
- 唯一标识符service
- 此项目所属的服务value
- 此商品的数字属性我正在尝试实现以下网址架构:
@RequestMapping(value = "")
- 返回所有项目的集合
@RequestMapping(value = "/{id}")
- 使用此id
返回特定项
@RequestMapping(value = "/{service}")
- 使用此service
这里的问题是第二和第三条路径是不明确的,如果我尝试下面的URL,Spring不知道要匹配哪个@RequestMapping
。
http://localhost/123
我该如何处理?
答案 0 :(得分:3)
@RequestMapping(value = "/{id}")
@RequestMapping(value = "/service/{service}")
你没有很多选择?但你也可以通过一点点重构来查询params。
@RequestMapping(value = "/{id}")
public String myMethod(@RequestParam(value = "service") String service){}
答案 1 :(得分: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
答案 2 :(得分:1)
这取决于id与服务的区别。例如,如果id是数字而服务是字符串,则可以使用正则表达式,如:
@RequestMapping(value = "/{id:\\d+}")
@RequestMapping(value = "/{service:[a-zA-Z]+}")