我正在使用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
}
有帮助吗?
答案 0 :(得分:1)
如果将实体映射到可以从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());
PageDto
和PagedResponseDto
的位置(大致)是:
class PageDto {
private Integer page;
private Integer size;
private Integer total;
}
class PagedResponseDto<T> {
private List<T> items;
private PageDto pageDto;
}
这不仅可以帮助您实现目标,而且将API层中的bean与域表示分离开也是一种好习惯。