我正在构建一个API,该API接受“ / search”请求的多个参数,以便可以使用findAll(Example<T> example)
过滤结果。在第二阶段中,我过滤了非平凡类型(Date
)以缩小搜索范围,效果很好。
现在我要实现分页的地方出现了问题。 Spring数据提供了findAll(Example<T> example, Pageable page)
方法,该方法为我创建了一个Page<T>
元素,该方法不再适用于我的过滤机制。
尽管Page<T>
提供了.filter(Predicate p)
函数,但是这会将我的Page转换为Streamable,这不是我需要的分页。
如何进一步过滤Page<T>
对象而不会导致意外的数据格式?
答案 0 :(得分:0)
我解决了这个问题,首先过滤掉没有分页信息的结果集,然后应用提交的分页参数。
int startIndex = page * size;
int endIndex = (startIndex + size) > myList.size() ? myList.size() : (startIndex + size);
JsonPage<>(myList.subList(startIndex, endIndex), PageRequest.of(page, size), myList.size());
与创建页面对象并将其解压缩以获取可过滤对象相比,这更直观。