java Spring数据JPA:过滤页面内容会导致页面比请求的页面小
情况
我们正在构建一个简单的API,使用分页获得属于给定Foo的Bars,如下所示:
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 楼答案
在我看来,它的发布取决于你将通过这个API发送什么
案例1: 您想获取通知列表->;在删除一些列表后,只需返回较小的列表,不会影响用户体验
案例2: 你想获得特定国家20个用户的排名,这就是为什么你删除了其中一些。然后你真的需要返回20个用户,所以最好实现一些定制的逻辑。人工增加的页面听起来根本没有效率
希望有帮助