春季HATEOAS分页

时间:2020-04-06 14:23:33

标签: java spring-boot pagination spring-restcontroller spring-hateoas

我当时正在考虑使用Spring HATEOAS在应用程序中支持分页。经过一番研究,我最终做了这样的事情。

我从服务班级退回了页面

 @Override
    public Page<TeamDTO> getListOfTeam(int page) {
        Pageable pageable = PageRequest.of(page, 8);
        Page<TeamEntity> result = teamRepository.findAll(pageable);
        return result.map(teamEntity -> toDTO(teamEntity));
    }

并使用PagedModel添加必要的链接

@GetMapping
    public ResponseEntity<PagedModel<TeamDTO>> getListOfTeam(@RequestParam(value = "page", defaultValue = "0", required = false) int page,PagedResourcesAssembler assembler) {
        Page<TeamDTO> teams = teamService.getListOfTeam(page);
        PagedModel<TeamDTO> pr = assembler.toModel(teams);

        return new ResponseEntity<>(assembler.toModel(teams),HttpStatus.OK);
    }

我最终得到了类似的东西

{
  "links": [
      {
        "rel": "first",
        "href": "http://localhost:8080/team?page=0&size=8"
      },
      {
        "rel": "self",
        "href": "http://localhost:8080/team?page=0&size=8"
      },
      {
        "rel": "next",
        "href": "http://localhost:8080/team?page=1&size=8"
      },
      {
        "rel": "last",
        "href": "http://localhost:8080/team?page=4&size=8"
      }
],
"content": [
      {
        "teamId": 1,
        "teamName": "string",
        "status": "string",
        "deliveryBoyMergerDTOList": [],
        "links": []
      },
      {
        "teamId": 2,
        "teamName": "string",
        "status": "string",
        "deliveryBoyMergerDTOList": [],
        "links": []
      },
      //rest of items
],
"page": {
      "size": 8,
      "totalElements": 36,
      "totalPages": 5,
      "number": 0
}
}

但这是我想要实现的目标

{
"links": [
        {
          "rel": "first",
          "href": "http://localhost:8080/team?page=0&size=8"
        },
        {
          "rel": "self",
          "href": "http://localhost:8080/team?page=0&size=8"
        },
        {
          "rel": "next",
          "href": "http://localhost:8080/team?page=1&size=8"
        },
        {
          "rel": "last",
          "href": "http://localhost:8080/team?page=4&size=8"
        }
],
"_embedded":{
    "teams":[
        {
          "teamId": 1,
          "teamName": "string",
          "status": "string",
          "deliveryBoyMergerDTOList": [],
          "links": []
        },
        {
          "teamId": 8,
          "teamName": "string",
          "status": "string",
          "deliveryBoyMergerDTOList": [],
          "links": []
        }
],
"page": {
      "size": 8,
      "totalElements": 36,
      "totalPages": 5,
      "number": 0
}
}

我对链接没问题,但我希望键是要返回的实体的名称,而不是“内容”。找不到任何可以遵循的示例或资源。我不确定如何应该继续实现我要寻找的东西。我可以照看的任何参考资料或任何建议都会有很大帮助。谢谢

1 个答案:

答案 0 :(得分:0)

我对链接没问题,但我希望密钥是我要返回的实体的名称,而不是“内容”

您可以通过将@Relation(collectionRelation = "teams")添加到您的TeamDTO类中来实现