在春季启动时调用分页的REST请求

问题描述 投票:-2回答:1

我正在构建一个需要进行实现了分页的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提供了我可以使用的东西吗?

请提出建议。

谢谢

java spring spring-boot pagination
1个回答
0
投票
它还提供了其他细节,因此有助于执行其他操作。

前端页面大小从1开始,后端页面从0开始。

Controller:

@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); }

ServiceImpl

@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;
  }
© www.soinside.com 2019 - 2024. All rights reserved.