如何在反应器中的异常类特定之后拥有一个通用的doOnError



感觉这应该很简单,所以我可能会错过一些明显的东西。 我有一个简单的示例案例,其中我有一个错误 Mono,并且我希望使用泛型处理程序进行特定于异常类的处理。

Mono.error(new RuntimeException())
.doOnError(RuntimeException.class, e -> System.out.println("Caught RuntimeException"))
.doOnError(Throwable.class, e -> System.out.println("Caught Throwable"))
.block();
output: Caught RuntimeException
Caught Throwable

问题是两个消费者都会被调用(一个使用 RuntimeException 和泛型的 Throwable(。如果已经调用了更具体的通用方法,是否有一种(干净的(方法来避免调用通用的?

如果有办法从错误中恢复,请改用 onErrorResume 函数。

Mono.error(new RuntimeException())
.flatMap(k -> callExternalService(k)
.onErrorResume(RuntimeException.class, this::recoverFromRuntimeExeption)
.onErrorResume(Throwable.class, this::recoverFromThrowable)
);

这样,您将 Mono 的执行路径从错误更改为成功,并且不会调用后续doOnError

相关内容

最新更新