如何修复此REST服务以避免模糊路径?

时间:2014-05-22 13:28:55

标签: spring rest spring-hateoas

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

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

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

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

返回所有项目的集合

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

http://localhost/123

我该如何处理?

3 个答案:

答案 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]+}")