Spring Rest Controller按id / ids方法查找

时间:2017-09-27 13:37:25

标签: spring rest spring-mvc spring-restcontroller

我的Spring RestController中有以下方法:

@RequestMapping(value = "/{decisionId}", method = RequestMethod.GET)
    public DecisionResponse findById(@PathVariable @NotNull @DecimalMin("0") Long decisionId) {
....
}

现在我需要添加{decisionIds}找到一组DecisionResponse的可能性..这样的事情:

@RequestMapping(value = "/{decisionIds}", method = RequestMethod.GET)
    public List<DecisionResponse> findByIds(@PathVariable @NotNull @DecimalMin("0") Set<Long> decisionIds) {
....
}

以下两种方法无法协同工作。

实现此功能的正确方法是什么?我应该只留下一个等待{decisionIds}的方法(第二个)并返回一个集合,即使我只需要1 Decision个对象吗?还有另一种正确的方法来实现这个吗?

2 个答案:

答案 0 :(得分:2)

您的问题是您可以在同一端点上使用2种不同的方法

换句话说,你不能同时拥有这两种方法:

@RequestMapping(value = "/{decisionId}", method = RequestMethod.GET)
    public DecisionResponse findById(@PathVariable @NotNull @DecimalMin("0") Long decisionId) {
....
}
@RequestMapping(value = "/{decisionIds}", method = RequestMethod.GET)
    public List<DecisionResponse> findByIds(@PathVariable @NotNull @DecimalMin("0") Set<Long> decisionIds) {
....
}

因为

@RequestMapping(value = "/{decisionIds}", method = RequestMethod.GET)

并且

@RequestMapping(value = "/{decisionId}", method = RequestMethod.GET)

是相同的端点。

因此,当您在http://<host>/19上获得HTTP请求GET时,您无法确定要使用的方法。

<强>解决方案

更清楚地重命名您的终端以避免冲突

@RequestMapping(value = "/decision/{Id}", method = RequestMethod.GET)

@RequestMapping(value = "/decisions/{Id}", method = RequestMethod.GET)

我希望这会对你有所帮助。

答案 1 :(得分:2)

您可以为发送单个long值以及long值数组创建单个端点:

@RequestMapping(value = "/{decisionIds}", method = RequestMethod.GET)
    public List<DecisionResponse> findByIds(@PathVariable @NotNull @DecimalMin("0") Set<Long> decisionIds) {
          System.out.println(decisionIds);
}

通过发送路径变量来调用此端点:

  

http://localhost:8080/11,12,113,14