我有一个 Web 服务,我正在尝试使用新的 Spring 5 WebClient 来使用它。
\n\n# GET /orders/\n[\n { orderId: 1, ...\xc2\xa0},\n { orderId: 1, ...\xc2\xa0}\n]\nRun Code Online (Sandbox Code Playgroud)\n\n以及调用的java代码
\n\n// Java\nFlux<Order> ordersStream = webClient.get()\n .uri("/orders/")\n .exchange()\n .flatMap(response -> response.bodyToFlux(Order.class));\nRun Code Online (Sandbox Code Playgroud)\n\n来自 Web 服务的响应是分页的,因此不直接包含项目列表,如上例所示。
\n\n看起来像这样
\n\n# GET /orders/\n{\n "error": null,\n "metadata": {\n "total": 998,\n "limit": 1000,\n "offset": 0\n },\n "data": [\n { orderId: 1, ... },\n { orderId: 2, ... },\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我怎样才能获得子"data"密钥Flux<Order>?
创建一个包装类并转换包装器 …
目前已经是一个关于分页的问题有ReactiveCrudRepository。接受的解决方案适用于遵循某种findBy格式的查询。项目文档还引用了该用法:
示例 158. 用于持久化 Person 实体的基本存储库接口
Run Code Online (Sandbox Code Playgroud)public interface ReactivePersonRepository extends ReactiveSortingRepository<Person, String> { Flux<Person> findByFirstname(String firstname); Flux<Person> findByFirstname(Publisher<String> firstname); Flux<Person> findByFirstnameOrderByLastname(String firstname, Pageable pageable); Mono<Person> findByFirstnameAndLastname(String firstname, String lastname); Mono<Person> findFirstByLastname(String lastname); }
问题是这不适用于 findAll:
interface CustomerRepository : ReactiveCrudRepository<Customer, String> {
fun findAll(pageable: Pageable): Flux<Customer>
Run Code Online (Sandbox Code Playgroud)
例外:
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type Customer!
Run Code Online (Sandbox Code Playgroud)
Spring Data MongoDB 是否以某种方式支持这一点?