有没有办法在spring webflux和spring数据反应中实现分页

时间:2017-08-28 17:33:58

标签: spring mongodb kotlin spring-data-mongodb spring-webflux

我试图理解弹簧5的反应部分。我创建了简单的休止端点,用于使用弹簧web-flux和弹簧数据反应(mongo)查找所有实体但是没有看到任何方式如何实施分页。

以下是我在Kotlin的简单例子:

@GetMapping("/posts/")
fun getAllPosts() = postRepository.findAll()

这是否意味着被动端点不需要分页?是否有某种方法可以使用此堆栈从服务器端实现分页?

2 个答案:

答案 0 :(得分:9)

Spring Data中的反应支持不提供Page返回类型的方法。在Pageablelimit传递给驱动程序的方法签名仍然支持offset参数,因此商店本身也会支持Flux<T>参数,返回发出请求范围的Flux<Person> findByFirstname(String firstname, Pageable pageable); 。 / p>

%PATH%

有关详细信息,请查看当前的Reference Documentation for 2.0.RC2Spring Data Examples

答案 1 :(得分:3)

Flux 提供了skiptake方法来获取分页支持,您还可以使用filtersort来过滤和排序结果

以下代码适用于我。

@GetMapping("")
public Flux<Post> all(@RequestParam(value = "q", required = false) String q,
                      @RequestParam(value = "page", defaultValue = "0") long page,
                      @RequestParam(value = "size", defaultValue = "10") long size) {
    return this.postRepository.findAll()
        .filter(p -> Optional.ofNullable(q).map(key -> p.getTitle().contains(key) || p.getContent().contains(key)).orElse(true))
        .sort(comparing(Post::getCreatedDate).reversed())
        .skip(page * size).take(size);
}