Java SpringDataJPA:过滤页面内容会导致页面比请求的页面小 处境

Java SpringDataJPA:过滤页面内容会导致页面比请求的页面小 处境,java,spring,jpa,spring-data-jpa,Java,Spring,Jpa,Spring Data Jpa,我们正在构建一个简单的API,以使用分页获得属于给定Foo的条,如: GET/foo/1/bar?pageSize=50和pageOffset=1 在后端,我们使用Spring Data JPA分页支持,如: Page<Bar> barsPage = repo.findBarsForFoo(fooId, new PageRequest(pageOffset, pageSize)); Page barsPage=repo.findBarsForFoo(fooId,new PageRe

我们正在构建一个简单的API,以使用分页获得属于给定Foo的条,如:

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

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

Page<Bar> barsPage = repo.findBarsForFoo(fooId, new PageRequest(pageOffset, pageSize));
Page barsPage=repo.findBarsForFoo(fooId,new PageRequest(pageOffset,pageSize));
问题 我们需要从barPage中筛选出某些元素-简单,如:

List filtered=barsFilter.removeSome(barsPage.getContent())

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

类条形过滤器{
@自动连线拒绝器1拒绝器1;
@自动连线拒绝器2拒绝器2;
公共列表筛选器某些(列表栏){
返回bar.stream()
.过滤器(条形->拒绝器1.匹配项(条形))
.过滤器(条形->拒绝器2.匹配项(条形))
.collect(toList());
}
}
问题是,API客户机将获得比他们请求的更少的项

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


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

在我看来,它的发布取决于您将通过此API发送什么

案例1: 您希望获得通知列表->而不只是返回较小的列表,在删除其中一些后,它不会影响用户体验

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

希望有帮助

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