我有端点:/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()
或map()
,但是正确的用法是什么?非常感谢
最佳答案
我相信您的var response
是Mono<ResponseWrapper<Upstream>>
,因此如下所示:
return response.flatMapMany(pesponseWrapper -> Flux.fromIterable(pesponseWrapper.getData()));