java - onErrorMap 和 onErrorContinue

标签 java spring-webflux project-reactor

我正在学习使用 Flux/Mono 进行错误处理并遇到以下问题:

Flux.just("AAA", "BBB", "AAA", "CCC")
    .map(s -> {
        if (s.equals("AAA")) {
            throw new IllegalArgumentException();
        }
        return s;
    })
    .map(s -> s + "-LOL")
    .onErrorMap(IllegalArgumentException.class, cause -> new IllegalStateException())
    .onErrorContinue(IllegalArgumentException.class, (e, a) -> System.out.println("Found IllegalArgumentException" + e))
    .onErrorContinue(IllegalStateException.class, (e, a) -> System.out.println("Found IllegalStateException" + e))
    .collectList()
    .block();

我想做的是将一个错误异常映射到另一个异常,然后我想以特定的方式处理它。

在我的代码中,我看到 onErrorContinue 仅针对 IllegalArgumentException 触发,但我不明白为什么 - 我刚刚将错误映射到 非法状态异常

最佳答案

如果您开始使用响应式编程,我强烈建议您避免使用 onErrorContinue。 这是一个非常具有误导性的运算符,适用于非常了解运算符内部工作原理的高级用户。我很遗憾每次提到它时都添加一个,并且正在考虑将其隐藏在公共(public) API 中,因为它很容易被认为是像这样简单的。 onErrorResume

考虑onErrorReturnonErrorResumedoOnErrorsubscribe(valueHandler, error -> doSomethingWithError(error))相反。

关于java - onErrorMap 和 onErrorContinue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66132725/

相关文章:

spring-webflux - 正确登录响应式(Reactive)应用程序 - WebFlux

java - NoSuchBeanDefinitionException : No qualifying bean of type 'org.springframework.boot.web.reactive.error.ErrorAttributes' available:

java - Spring 5 响应式(Reactive) websocket : Clients not receiving same data from hot stream

java - 在 Mono 的阻塞线程上执行转换步骤

java - WebClient 的 bodyToMono 错误

java - @ManyToOne单向参数值与预期类型不匹配

java - 如何基于XSD "Auto-Repair"XML?

java - 我可以在 .removeif() 中使用 .size() 作为 ArrayList 的条件吗?

spring-boot - 使用 webclient webflux 将文件发布到接受 APPLICATION_OCTET_STREAM 的 API

java - 按天对长 UTC 日期进行分组