我试图理解弹簧5的反应部分。我创建了简单的休止端点,用于使用弹簧web-flux
和弹簧数据反应(mongo)查找所有实体但是没有看到任何方式如何实施分页。
以下是我在Kotlin的简单例子:
@GetMapping("/posts/")
fun getAllPosts() = postRepository.findAll()
这是否意味着被动端点不需要分页?是否有某种方法可以使用此堆栈从服务器端实现分页?
答案 0 :(得分:9)
Spring Data中的反应支持不提供Page
返回类型的方法。在Pageable
和limit
传递给驱动程序的方法签名仍然支持offset
参数,因此商店本身也会支持Flux<T>
参数,返回发出请求范围的Flux<Person> findByFirstname(String firstname, Pageable pageable);
。 / p>
%PATH%
有关详细信息,请查看当前的Reference Documentation for 2.0.RC2和Spring Data Examples。
答案 1 :(得分:3)
Flux 提供了skip
和take
方法来获取分页支持,您还可以使用filter
和sort
来过滤和排序结果
以下代码适用于我。
@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);
}