每次我认为我了解 Webflux 和项目反应器时,我发现我不知道。所以我进行了一些 API 调用……我想先调用 1……使用该信息获取信息,以进行后续调用。
所以我这样做
public Mono<ResponseObject> createAggregatedRecords(RecordToPersist recordToPersist){
return randomApiClient.createRecord(recordToPersist)
.flatMap(result -> {
return Mono.zip(
webClientInstance.createOtherRecord1(result.getChildRecord1()),
webClientInstance2.createOtherRecord2(result.getChildRecord2()),
webClientInstance3.createOtherRecord3(result.getChildRecord3()))
.map(tupple -> {
ResponseObject respObj = new ResponseObject();
respObj.setChildResult1(tupple.getT1());
respObj.setChildResult2(tupple.getT2());
respObj.setChildResult3(tupple.getT3());
return respObj;
}
}).doOnSuccess(res -> log.info("This throws an error: {}", res.getChildResult1.getFirstField()))
}
现在,由于某种原因,我将带有此代码的空对象返回给我的控制器,并且我没有在 Json 中打印出该对象。
我怀疑这是因为我将 Mono.zip 嵌套在平面图中,并且没有正确返回结果。尽管我的端到端集成测试成功了,但我正在进行所有这些 API 调用。
现在我想我会从 Mono.zip 链中的 .map 函数返回该响应对象,然后将其返回给链中的 flatMap 调用。如果我像 doOnSuccess 一样将观察者放在链上并打印出响应对象字段,我会得到一个空指针......不知道我错过了什么
- 这是实现该目标的好模式吗?还是我应该尝试不同的路径?
- 为什么我不能让响应对象返回?