我当时正在考虑使用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
}
}
我对链接没问题,但我希望键是要返回的实体的名称,而不是“内容”。找不到任何可以遵循的示例或资源。我不确定如何应该继续实现我要寻找的东西。我可以照看的任何参考资料或任何建议都会有很大帮助。谢谢
答案 0 :(得分:0)
我对链接没问题,但我希望密钥是我要返回的实体的名称,而不是“内容”
您可以通过将@Relation(collectionRelation = "teams")
添加到您的TeamDTO
类中来实现