我有一个Web服务,我正在尝试使用新的Spring 5 WebClient。
# GET /orders/
[
{ orderId: 1, ... },
{ orderId: 1, ... }
]
调用的java代码
// Java
Flux<Order> ordersStream = webClient.get()
.uri("/orders/")
.exchange()
.flatMap(response -> response.bodyToFlux(Order.class));
来自Web服务的响应是分页的,因此不会直接包含项目列表,如上例所示。
看起来像这样
# GET /orders/
{
"error": null,
"metadata": {
"total": 998,
"limit": 1000,
"offset": 0
},
"data": [
{ orderId: 1, ... },
{ orderId: 2, ... },
]
}
如何将子键"data"
作为Flux<Order>
?
创建一个包装类并将包装器.data
转换为通量。
但现在我们需要立即反序列化整个响应,可能会耗尽内存。
// Java
Flux<Order> ordersStream = webClient.get()
.uri("/orders/")
.exchange()
.flatMap(response -> response.bodyToMono(PageWrapper.class))
.flatMapMany(wrapper -> Flux.fromIterable(wrapper.data));
有更好的方法吗?