Spring HATEOAS для нумерации страниц - PullRequest
1 голос
/ 06 апреля 2020

Я думал об использовании 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 голосов
/ 09 апреля 2020

У меня все в порядке со ссылками, но я хотел, чтобы ключом было имя сущности, которую я возвращаю, а не 'content'

Этого можно добиться, добавив @Relation(collectionRelation = "teams") к ваш TeamDTO класс

...