如何返回仅包含短页面信息的分页代码



我正在使用Hibernate,JPA和Spring,我想返回一个带有贷款分页的json。我希望页面信息简单,只有页面,大小和总数,如下所示:

{
  "items":[
    {
      “id”: 1,
      “total”: 2500.00
      “user_id”: 1
    },
    {
      “id”: 2,
      “total”: 65120.75
      “user_id”: 1
    }
  ],
  "paging":{
    "page": 1,
    "size": 50,
    "total": 1500
  }
 }

我有一个用于贷款的 JPA 存储库。

这是我的控制器现在的样子:

@RestController
@RequestMapping("/loans")
public class LoansController {
@Autowired
private UserLoansRepository loansRep;
@GetMapping(params = { "page", "size" })
public Page<UserLoansEntity> findPaginated(@RequestParam("page") int page,
                             @RequestParam("size") int size) {
    Pageable pages = PageRequest.of(page, size);
    Page<UserLoansEntity> resultPage = loansRep.findAll(pages);
    return resultPage;
}
}

我得到这个:

{
    "content": [
        {
            "idLoan": 10,
            "total": 222
        },
        {
            "idLoan": 11,
            "total": 3333
        },
        {
            "idLoan": 12,
            "total": 3333.33
        }
    ],
    "pageable": {
        "sort": {
            "sorted": false,
            "unsorted": true,
            "empty": true
        },
        "pageSize": 3,
        "pageNumber": 0,
        "offset": 0,
        "unpaged": false,
        "paged": true
    },
    "last": false,
    "totalPages": 2,
    "totalElements": 5,
    "first": true,
    "sort": {
        "sorted": false,
        "unsorted": true,
        "empty": true
    },
    "numberOfElements": 3,
    "size": 3,
    "number": 0,
    "empty": false
}

有什么帮助吗?

如果将实体映射到可以从 API 返回的 DTO 对象,可能会有所帮助。

您可以手动映射属性或使用对象映射库(如 Orika、Jackson(。只是给你一个粗略的想法:

PageDto pageDto = new PageDto();
pageDto.setPage(resultPage.getPageable().getPageSize());
pageDto.setSize(resultPage.getPageable().getPageNumber() + 1);
pageDto.setTotal(resultPage.getTotalElements());
pagedResponseDto.setPaging(pageDto);
pagedResponseDto.setItems(pageDto.getContent());

其中,PageDtoPagedResponseDto是(大致(:

class PageDto {
  private Integer page;
  private Integer size;
  private Integer total;
}
class PagedResponseDto<T> {
  private List<T> items;
  private PageDto pageDto;
}

这不仅可以帮助您实现目标,而且将 API 层中的 bean 与域表示分离也是一种很好的做法。

最新更新