当我的响应被 Spring 5 包装在 json 分页对象中时,如何返回 Flux

2024-04-17

我有一个 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));

Problem

来自 Web 服务的响应是分页的,因此不直接包含项目列表,如上例所示。

看起来像这样

# GET /orders/
{
    "error": null,
    "metadata": {
      "total": 998,
      "limit": 1000,
      "offset": 0
    },
    "data": [
       { orderId: 1, ... },
       { orderId: 2, ... },
    ]
}

我如何获得子密钥"data" as a Flux<Order>?

可能的解决方案,但我不知道这是否是最好的方法......

创建一个包装类并转换包装器.data到通量。

但现在我们需要立即反序列化整个响应,可能会耗尽内存。

// Java
Flux<Order> ordersStream = webClient.get()
    .uri("/orders/")
    .exchange()
    .flatMap(response -> response.bodyToMono(PageWrapper.class))
    .flatMapMany(wrapper -> Flux.fromIterable(wrapper.data));

有没有更好的办法?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我的响应被 Spring 5 包装在 json 分页对象中时,如何返回 Flux ? 的相关文章

随机推荐