我正在构建一个需要进行实现了分页的REST调用的Spring Boot应用程序,例如:
http://host/api/getlist?p=1&ps=100
其中p是页面编号,ps是页面大小。
此api的结果除了输出列表外,还显示分页信息,例如:
"paging": {
"pageIndex": 1,
"pageSize": 100,
"total": 372
}
当前,在我的第一个匹配中,我正在检索输出列表,还读取此分页信息,然后计算还需要多少个匹配。在上述情况下,372 / 100 = 3
,然后是3 - 1
,因为已经完成了一次匹配。
但这是非常幼稚的方法。 spring / java提供了我可以使用的东西吗?
请提出建议。
谢谢
答案 0 :(得分:0)
@reiley使用Pageable界面实现分页。
它还提供了其他细节,因此有助于执行其他操作。
前端页面大小从1开始,后端页面大小从0开始。
@GetMapping("/")
private ResponseEntity<Page<User>> getUsers(@RequestParam(value = "page_no", defaultValue = "1") Integer pageNo,
@RequestParam(value = "limit", defaultValue = "10") Integer limit,
@RequestParam(value = "order_by", defaultValue = "userId") String sortBy,
@RequestParam(value = "order_type", defaultValue = "asc") String orderBy) {
Page<UserDTO> users = userService.getUsers(pageNo, limit, sortBy, orderBy);
return customResponse(true, Constants.DATA_FETCH, ENTITY_NAME.concat("s"), users);
}
@Override
public Page<UserDTO> getUsers(Integer pageNo, Integer limit, String sortBy, String orderBy) {
Sort sortingInOrder = Util.sortingOrder(orderBy, sortBy);
Pageable pageable = PageRequest.of(pageNo - 1, limit, sortingInOrder);
Page<UserDTO> result = userRepository.findAll(pageable).map(user -> userMapper.toDTO(user));
if (result.getContent().size() > 0) {
return result;
}
return Page.empty();
}
public static Sort sortingOrder(String orderBy, String sortBy) {
Sort sortingInOrder;
switch (orderBy) {
case "asc":
sortingInOrder = Sort.by(sortBy).ascending();
break;
case "desc" :
sortingInOrder = Sort.by(sortBy).descending();
break;
default:
throw new CustomException("Invalid Input in order by!!!");
}
return sortingInOrder;
}