gpt4 book ai didi

java - Spring 数据 JPA : Filtering page contents results in a smaller page than requested

转载 作者:搜寻专家 更新时间:2023-11-01 03:34:40 25 4
gpt4 key购买 nike

情况

我们正在构建一个简单的 API 来获取属于给定 FooBar,使用如下分页:

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

过滤组件委托(delegate)给其他服务(我们称它们为拒绝器):

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 客户端将获得比他们请求的更少的项目

陷阱

过滤逻辑很复杂,依赖于其他组件。它不能写成单个数据库查询。

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

最佳答案

在我看来,它的发布取决于您将通过此 API 发送的内容。

案例 1:您想要获取通知列表 -> 比您可以简单地返回更小的列表,在删除其中一些之后,它不会影响用户体验。

案例 2:您想要获得特定国家/地区 20 个用户的排名,这就是您删除其中一些用户的原因。那么你真的需要返回20个用户,所以最好实现一些定制的逻辑。人为增加页面听起来一点效率都没有。

希望对您有所帮助。

关于java - Spring 数据 JPA : Filtering page contents results in a smaller page than requested,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34644598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com