I have started a new project using Spring Webflux and I am fairly new to this reactive coding paradigm. So apologies in advance for questioning like newbies.
My controller method returns the response as Mono<ResponseEntity<String>>
and I have three different services to call from where I am getting three different Mono
object like this -
Mono<CustomObject> customMono = serivce1.method();
Mono<Boolean> booleanMono = service2.method();
Mono<String> stringMono = service3.method();
So in order prepare the response(Mono<ResponseEntity<String>>
), I need to do something like this -
Mono.zip(customMono, booleanMono, stringMono, (customData, booleanData, stringData) -> {
------
return Mono.just(ResponseEntity.ok().body("-----"));
});
The problem is, there are no such zip
method to take 3 Mono
and a function as parameters. I already found thise -
https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#zip-reactor.core.publisher.Mono-reactor.core.publisher.Mono-java.util.function.BiFunction-
but it doesn't fulfil my requirement. So issues I am facing
In summary, what I need to do:
Mono<ResponseEntity<String>>
) using the data from all the service call.Thanks in advance. As a newbie, any suggestion is appreciated.
Whenever you zip the two mono then the third parameter will be BiFunction
but with three-parameter, it returns a flatmap
of tuple
then in the tuple you will get the response of other Monos.
You need to modify your code in the below manner.
Mono.zip(customMono, booleanMono, stringMono).flatMap(data->{
data.getT1();
data.getT2();
data.getT3();
return <your_response_object>;
});
Now what will be the return type of getT1()
,getT2()
and getT3()
?
Obusally it will depend on what your Zip Mono return.
Hope so it will help you.