Я думал об использовании 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
}
}
У меня все в порядке со ссылками, но я хотел, чтобы ключом было имя возвращаемой сущности, а не «содержимое». Я не смог найти никаких примеров или источников Я мог бы следовать за этим. Я не совсем уверен, как мне поступить, чтобы достичь того, что я ищу. Любой справочный материал, за которым я мог бы присмотреть, или любое предложение было бы очень полезным. Спасибо