Java 如何在SpringWebFlux/webclient中有条件地链接webclient调用

Java 如何在SpringWebFlux/webclient中有条件地链接webclient调用,java,spring,spring-webflux,Java,Spring,Spring Webflux,我正在尝试使用WebClient实现以下场景。使用RestTemplate很简单,但我不能再这样做了 伪java代码中Spring控制器的相关部分: monot1=webClient.get…retrieve。。。; 单t2; 如果t1.getResult.getValue>0{ t2=webClient.get.buildUsingt1.getResult.getValue…检索。。。; }否则{ t2=Mono.empty; } returnMono.zipt1,t2,merge函数; 我不

我正在尝试使用WebClient实现以下场景。使用RestTemplate很简单,但我不能再这样做了

伪java代码中Spring控制器的相关部分:

monot1=webClient.get…retrieve。。。; 单t2; 如果t1.getResult.getValue>0{ t2=webClient.get.buildUsingt1.getResult.getValue…检索。。。; }否则{ t2=Mono.empty; } returnMono.zipt1,t2,merge函数; 我不是在问如何使用Webflux。我还可以自己添加错误处理。我的问题是,如果第一次调用成功,如何将数据传递给第二次调用,以及在何处合并两次调用的结果,其中一次调用可能会发生,也可能不会发生。如果我可以使用RestTemplate,那么这个任务绝对是微不足道的


有一个标题非常相似的问题,但没有得到回答

据我所知,这是我的反应式解决方案:

 private static Mono<String> mono() {
    Mono<Integer> t1 = Mono.just(0);

    return t1.flatMap(outerResult -> outerResult > 0
        ? Mono.just("VALUE").map(innerResult -> outerResult + "" + innerResult)
        : Mono.just(outerResult.toString())
    );
}
那么这里发生了什么:

使用.flatMap,您可以订阅一个新的Mono并获取结果。
在.flatMap的lambda中,您仍然拥有t1的结果,因此如果需要订阅,您可以在t2上使用.map,或者只需对t1的结果执行任何操作,以使其达到所需的返回值。

据我所知,这是我的反应式解决方案:

 private static Mono<String> mono() {
    Mono<Integer> t1 = Mono.just(0);

    return t1.flatMap(outerResult -> outerResult > 0
        ? Mono.just("VALUE").map(innerResult -> outerResult + "" + innerResult)
        : Mono.just(outerResult.toString())
    );
}
那么这里发生了什么:

使用.flatMap,您可以订阅一个新的Mono并获取结果。 在.flatMap的lambda中,您仍然拥有t1的结果,因此如果需要订阅,您可以在t2上使用.map,或者只需对t1的结果执行任何操作,以使其达到所需的返回值。

我认为zipWhen非常适合此目的。zipWhen等待第一个mono的结果,然后将两个结果合并成一个Tuple2

结果是一个同时包含两个值的Mono

我认为zipWhen非常适合这个用途。zipWhen等待第一个mono的结果,然后将两个结果合并成一个Tuple2

结果是一个同时包含两个值的Mono