Spring RestController url 用于 findById 和 findByIds

Spring RestController url for findById and findByIds

在我的 Spring 引导应用程序中,我有一个以下 REST 控制器:

@RestController
@RequestMapping("/v1.0/decisions")
public class CriterionController {

    @Autowired
    private CriterionService criterionService;

    @RequestMapping(value = "/{decisionId}/criteria/{criterionId}", method = RequestMethod.GET)
    public CriterionResponse findById(@PathVariable @NotNull @DecimalMin("0") Long decisionId, @PathVariable @NotNull @DecimalMin("0") Long criterionId) {
        Criterion criterion = criterionService.findById(criterionId);
        return new CriterionResponse(criterion);
    }

}

一切正常,我可以通过 ID.

检索 Criterion

现在我需要向我的 CriterionController 添加额外的逻辑,它将通过一组 IDs.

检索 Criterion

现在我怀疑它是如何实现的。例如,我应该添加一个单独的端点,例如:

/{decisionId}/criteria/{criterionIds}

或者例如为此目的或以其他方式重用现有的。请告知如何根据 REST 的最佳实践实现它。

这是一个棘手的问题,但我可以建议 2 个选项:

/{decisionId}/criteria?id=1&id=2&id=3

/{decisionId}/criteria?id=1,2,3

前者看起来更 RESTful 但最终可能会很长 URL 因为您每次都需要指定查询参数。

后者将 id 聚合在一个逗号分隔的列表中。我个人更喜欢这个选项,并且愿意这样做。

虽然与 REST 无关,但 URL 均在 RFC 6570

的第 3.2.8 节中接受