Reputation: 139
I need to construct a JSON from 3 api calls.
Sample code
private Mono<RequestPayload> buildRequestPayload(Request request) {
RequestPayload requestPayload = null;
Mono<T> response1 = webclient1.get(request.getId());
response1.flatMap(res -> {
return webclient2.getDetails(res.getId());
//not sure how to call webclient3.getDetails(response1.getId()) after return statement
});
//I think the final one should be something like this (not sure though) but did not get until here
return Mono.zip(respons1, resppnse2, response3).flatMap(finalResponse -> {
requestPayload.setResponse1(finalResponse.getT1());
requestPayload.setResponse2(finalResponse.getT2());
requestPayload.setResponse3(finalResponse.getT3());
});
}
I'm getting null in the pipeline not sure where the error is
Upvotes: 1
Views: 95
Reputation: 6255
You should chain all of your operations in order to create a reactive stream. You can accomplish this using flatmap
and map
operators:
private Mono<RequestPayload> buildRequestPayload(Request request) {
return executeRequest1()
.flatMap(request1Result ->
executeRequest2()
.map(request2Result -> RequestPayload.builder()
.response1(request1Result)
.response2(request2Result)
.build()))
.flatMap(requestPayload ->
executeRequest3()
.map(request3Result -> {
requestPayload.response3(request3Result);
return requestPayload;
})
);
}
Upvotes: 1