我需要调用一个API,其响应具有以下形式,并且它承诺在结果之前返回元数据:
{
"metadata": {...},
"results": [...]
}
我正在使用WebClient,我希望最终得到Flux<Result>
,因此我可以处理它们而不会阻止所有内容到达。有没有办法做到这一点?
我认为我最终会像Mono<Tuple2<Metadata, Flux<Result>>>
那样,所以我不会阻止等待元数据或结果
答案 0 :(得分:1)
由于以下几个原因,无法做到这一点:
"application/json"
内容类型进行响应,该内容类型不是流式传输如果远程API实际使用"application/stream+json"
或"text/event-stream"
流式传输响应结果(并且只显示结果!),则可以使用此功能。这样每个结果都可以单独解析。
现在,您需要一次性解析您所获得的API响应。 如果响应不是那么大而不是流式传输,那么在一次传递中解析整个事情实际上更有效,并且您总是可以执行以下操作:
Mono<ResponseObject> response = //...
Flux<Result> results = result.flatMap(r -> Flux.fromIterable(r.getResults());