如何重用通量单值?

时间:2018-08-08 15:52:02

标签: java spring spring-webflux

考虑一个代码:

WebClient webClient = ... ;

public Mono<MyWrapper> someFunction () {
    Mono<MyDto> mono = webClient.get()
       .uri("myUrl")
       .retrieve()
       .bodyToMono(MyDto.class);

    Mono<FirstDto> first = mono.map(dto -> {...});
    Mono<SecondDto> second = mono.map(dto -> {...}); //<- connection closed error here

    return Mono.zip(first, second).map(zip -> {
        return new MyWrapper(first, second);
    });
}

第二map操作导致连接关闭错误。我认为助焊剂试图发送新请求。 (是否?) 其次,有没有一种方法可以map两次:一次发送一种类型,另一种不发送请求?

1 个答案:

答案 0 :(得分:0)

您尝试过使用compose吗?

Mono<MyWrapper> mono = webClient.get()
        .uri("myUrl")
        .retrieve()
        .bodyToMono(MyDto.class)
        .compose(dto -> dto
                .zip(dto.map(dto -> {...}), dto.map(dto -> {...})))
        .map(MyWrapper::new);

API: https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#compose-java.util.function.Function-