在 Reactor 中出现异常 class 特定异常后,如何获得通用的 doOnError

How can I have a generic doOnError after exception class specific ones in Reactor

感觉这应该很简单,所以我可能遗漏了一些明显的东西。 我有一个简单的示例案例,我有一个错误 Mono,我想用通用处理程序进行异常 class 特定处理。

    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 将不会被调用。