首页 > 解决方案 > Spring Reactive:转换通量> 到通量

问题描述

我有端点:/upstreams

它将以以下格式返回 Json:

{
  "next" : "String",
  "data" : [
    {
       "id" : "String",
       "name" : "String"
    }
  ]
}

我有几个这样的端点,所以我创建了一个包装类

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponseWrapper<T> {

    private List<T> data;

    private String next;

}

对于/upstream上面的响应,数据类型是Upstream

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Upstream extends Node {

    private String id;

    private String name;

}

现在我有一个必须返回Flux<Stream>(或List<Stream>?)的服务,所以我创建了这种方法

@Override
public Flux<Stream> getAllNodes() {
    var endpoint = "/upstream";

    var response = webClient.get().uri(endpoint).retrieve()
            .bodyToMono(new ParameterizedTypeReference<ResponseWrapper<Upstream>>() {
            });

    return ???;
}

我怎样才能转换ResponseWrapper<Upstream>它返回Flux<Stream>List<Stream>

我猜是.flatMap()or map(),但正确的用法是什么?

非常感谢

标签: javareactive-programmingspring-webfluxreactor

解决方案


我相信你var response是一个Mono<ResponseWrapper<Upstream>>,所以是这样的:

return response.flatMapMany(pesponseWrapper -> Flux.fromIterable(pesponseWrapper.getData()));

推荐阅读