在页面对象上应用过滤器

时间:2018-11-02 13:20:27

标签: java spring spring-data-jpa

我正在构建一个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>对象而不会导致意外的数据格式?

1 个答案:

答案 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());

与创建页面对象并将其解压缩以获取可过滤对象相比,这更直观。