Я пытаюсь понять реактивную часть весны 5. Я создал простую точку отдыха для поиска всех объектов, использующих весенний web-flux
и весенние данные, реактивные (mongo), но не вижу способа реализовать разбиение на страницы.
Вот мой простой пример в Котлине:
@GetMapping("/posts/") fun getAllPosts() = postRepository.findAll()
Означает ли это, что реактивная конечная точка не требует разбивки на страницы? Есть ли способ реализовать разбиение на страницы со стороны сервера с помощью этого стека?
Реактивная поддержка в Spring Data не предоставляет средства возвращаемого типа Page
. Тем не Pageable
параметр Pageable
поддерживается в сигнатурах методов, проходящих по limit
и offset
к драйверам, и, следовательно, самому хранилищу, возвращая Flux<T>
который испускает запрошенный диапазон.
Flux<Person> findByFirstname(String firstname, Pageable pageable);
Для получения дополнительной информации ознакомьтесь с текущей справочной документацией для 2.0.RC2 и примеров данных Spring .
Flux обеспечивает skip
и методы, чтобы получить поддержку разбивки на страницы, а также вы можете использовать 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); }