有什么办法可以实现春季webflux的分页和弹簧数据的反应
我试图了解Spring 5的反应部分。我已经创建了简单的rest端点,用于查找所有使用spring web-flux
和spring data reactive(mongo)的实体,但是没有看到如何实现分页。
这是我在Kotlin的简单例子:
@GetMapping("/posts/") fun getAllPosts() = postRepository.findAll()
这是否意味着反应终点不需要分页? 有什么办法从服务器端使用这个堆栈实现分页?
Spring Data中的被动支持不提供Page
返回types的方法。 尽管如此, Pageable
参数在方法签名中也是受支持的,这些方法签名将limit
和offset
传递给驱动程序,因此存储本身也会返回一个Flux
,它发出请求的范围。
Flux findByFirstname(String firstname, Pageable pageable);
有关更多信息,请参阅2.0.RC2的当前参考文档和Spring数据示例 。
Flux提供了skip
和获取分页支持的方法,您也可以使用filter
和sort
来筛选和排序结果。
以下代码适用于我。
@GetMapping("") public Flux 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); }