在 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
将不会被调用。
感觉这应该很简单,所以我可能遗漏了一些明显的东西。 我有一个简单的示例案例,我有一个错误 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
将不会被调用。