我想了解弹簧5的反应部分。我创建了简单的休息终点找到所有使用弹簧web-flux
和弹簧数据反应(mongo)的实体,但没有看到如何实现分页。有没有什么办法来实现春季webflux分页和弹簧数据反应
这是我在科特林简单的例子:
@GetMapping("/posts/")
fun getAllPosts() = postRepository.findAll()
这是否意味着反应终点不需要分页?有一种方法可以使用这个堆栈从服务器端实现分页吗?
我想了解弹簧5的反应部分。我创建了简单的休息终点找到所有使用弹簧web-flux
和弹簧数据反应(mongo)的实体,但没有看到如何实现分页。有没有什么办法来实现春季webflux分页和弹簧数据反应
这是我在科特林简单的例子:
@GetMapping("/posts/")
fun getAllPosts() = postRepository.findAll()
这是否意味着反应终点不需要分页?有一种方法可以使用这个堆栈从服务器端实现分页吗?
Spring Data中的反应支持不提供Page
返回类型的方法。尽管如此,Pageable
参数在驱动程序上传递limit
和offset
的方法签名中也受支持,因此该存储本身返回发出请求范围的Flux<T>
。
Flux<Person> findByFirstname(String firstname, Pageable pageable);
欲了解更多信息,请看看在当前Reference Documentation for 2.0.RC2和Spring Data Examples。
流量提供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);
}
[Spring自定义查询与可分页]的可能重复(https://stackoverflow.com/questions/27296533/spring-custom-query-with-pageable) – Makoto