Spring RestController url for findById和findByIds

时间:2017-03-07 18:49:53

标签: spring rest spring-mvc spring-restcontroller

在我的Spring Boot应用程序中,我有一个以下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);
    }

}

一切正常,我可以通过Criterion检索ID

现在我需要向我的CriterionController添加额外的逻辑,该逻辑将通过一组Criterion检索IDs

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

/{decisionId}/criteria/{criterionIds}

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

1 个答案:

答案 0 :(得分:1)

这是一个棘手的问题,但我可以提出两个选项:

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

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

前者可被视为更多RESTful,但最终可能会有一个非常长的URL,因为您每次都要指定查询参数。

后者在逗号分隔列表中聚合id。我个人更喜欢这个选项而且会选择这个。

虽然不是关于REST,但RFC 6570

的第3.2.8节接受了这两个URL