有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring数据JPA:过滤页面内容会导致页面比请求的页面小

情况

我们正在构建一个简单的API,使用分页获得属于给定FooBars,如下所示:

GET /foo/1/bar?pageSize=50&pageOffset=1

在后端,我们使用Spring Data JPA分页支持,如:

Page<Bar> barsPage = repo.findBarsForFoo(fooId, new PageRequest(pageOffset, pageSize));

问题

我们需要从barPage中筛选出某些元素——很简单,比如:

List<Bar> filtered = barsFilter.removeSome(barsPage.getContent())

筛选其他服务的组件委托(我们称之为拒绝者):

class BarsFilter {
  @Autowired Rejector1 rejector1;
  @Autowired Rejector2 rejector2;

  public List<Bar> filterSome(List<Bar> bars) {
    return bars.stream()
      .filter(bar -> rejector1.matches(bar))
      .filter(bar -> rejector2.matches(bar))
      .collect(toList());
  }
}

问题是,API客户机得到的项目数量比他们要求的要少

Gotchas

过滤逻辑非常复杂,并且依赖于其他组件。它不能作为单个数据库查询编写

在这里最合理的做法是什么?返回较小的页面?人为增加页面大小?利用一些Spring数据或JPA机制来支持这种定制逻辑


共 (1) 个答案

  1. # 1 楼答案

    在我看来,它的发布取决于你将通过这个API发送什么

    案例1: 您想获取通知列表->;在删除一些列表后,只需返回较小的列表,不会影响用户体验

    案例2: 你想获得特定国家20个用户的排名,这就是为什么你删除了其中一些。然后你真的需要返回20个用户,所以最好实现一些定制的逻辑。人工增加的页面听起来根本没有效率

    希望有帮助