Java 在Reactor中特定于类的异常之后,如何才能有一个泛型doon错误

Java 在Reactor中特定于类的异常之后,如何才能有一个泛型doon错误,java,reactor,Java,Reactor,感觉这应该很简单,所以我可能遗漏了一些明显的东西。 我有一个简单的例子,其中我有一个错误Mono,我想用一个泛型处理程序处理异常类 Mono.error(new RuntimeException()) .doOnError(RuntimeException.class, e -> System.out.println("Caught RuntimeException")) .doOnError(Throwable.class, e -

感觉这应该很简单,所以我可能遗漏了一些明显的东西。 我有一个简单的例子,其中我有一个错误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)。如果已经调用了更具体的泛型函数,是否有(干净的)方法避免调用泛型函数?

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

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

通过这种方式,您可以将Mono的执行路径从错误更改为成功,并且不会调用后续的
doError

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

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

通过这种方式,您可以将Mono的执行路径从错误更改为成功,并且不会调用后续的
doError

这将是问题的解决方案,但我仍然需要维护带有错误的执行路径,因为稍后我会使用通用错误处理逻辑。这里我想做的是在尝试失败后进行一些“清理”步骤,但仍然保留错误mono。我仍然会接受这一回答,因为它解决了我提出的问题,我应该更具体。这将是问题的解决方案,但我仍然需要维护错误的执行路径,因为后来我有了通用的错误处理逻辑。这里我想做的是在一次失败的尝试后进行一些“清理”步骤,但仍然保留错误mono。我仍然接受这一回答,因为它解决了我提出的问题,我应该更具体一些。