【问题标题】:Call paginated REST request in spring boot在 Spring Boot 中调用分页 REST 请求
【发布时间】:2020-05-10 13:14:44
【问题描述】:

我正在构建一个 Spring Boot 应用程序,该应用程序需要进行已实现分页的 REST 调用,例如:

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 有什么东西可以用吗?

请提出建议。

谢谢

【问题讨论】:

  • 它没有天真。它只是使用简单(但不正确)的算术。如果有 372 个元素,页面大小为 100,则总共需要发出 4 个请求,而不是 3 个:元素 1 到 100 一个,元素 101 到 200 一个,元素 201 到 300 一个,一个元素 301 到 372。
  • @JBNizet,是的,我的意思只是,如果有其他更清洁的解决方案,我会更加关注。
  • 不,没有。
  • Graphql 替代方案 :graphql.org/learn/pagination 它会给你更多的灵活性你想加载什么
  • 这里有几种替代方法stackoverflow.com/questions/34647303/…

标签: java spring spring-boot pagination


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-23
    • 2018-09-11
    • 2021-09-22
    • 1970-01-01
    • 2018-12-13
    • 2018-02-28
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多