gpt4 book ai didi

java - 如何在 Reactor 中的异常类特定异常之后有一个通用的 doOnError

转载 作者:行者123 更新时间:2023-12-02 10:44:01 25 4
gpt4 key购买 nike

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

关于java - 如何在 Reactor 中的异常类特定异常之后有一个通用的 doOnError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52723194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com