我的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
个对象吗?还有另一种正确的方法来实现这个吗?
答案 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);
}
通过发送路径变量来调用此端点: