【发布时间】:2020-10-14 23:30:25
【问题描述】:
这是我的代码:
public Mono<Foo> doSomething(String fooId, String barId) {
Mono<Foo> firstResult = firstServiceCall(fooId, barId);
Mono<List<Baz>> secondResult = secondServiceCall(fooId);
return firstResult.flatMap(secondResult::thenReturn);
}
private Mono<Foo> firstServiceCall(String fooId, String barId) {
return fooRepo
.findByFooIdAndBarId(fooId, barId)
.switchIfEmpty(Mono.error(new ResponseStatusException(NOT_FOUND)))
.filter(Foo::isSomething)
.switchIfEmpty(Mono.error(new ResponseStatusException(UNPROCESSABLE_ENTITY)))
.doOnNext(foo -> foo.setSomething(false))
.flatMap(fooRepo::save);
}
private Mono<List<Baz>> secondServiceCall(String fooId) {
var filter = new BazSearchFilter();
filter.setFooId(fooId);
return bazRepo
.findAllByFilter(filter)
.doOnNext(baz -> baz.setStatus(BazStatus.SOMETHING))
.collectList()
.flatMapMany(bazRepo::saveAll)
.collectList();
}
由于某种原因,doSomethingMethod 总是调用 secondServiceCall 方法,尽管从 firstServiceCall 方法传播了错误信号(NOT_FOUND 或 UNPROCESSABLE_ENTITY 场景)。
由于我使用的是 flatMap,我希望 secondServiceCall 不会关闭,但也许我遗漏了一些东西。
有谁知道如何解决这个问题?
【问题讨论】:
标签: java spring spring-webflux reactor