Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 流量:过滤异常_Java_Spring Webflux_Project Reactor - Fatal编程技术网

Java 流量:过滤异常

Java 流量:过滤异常,java,spring-webflux,project-reactor,Java,Spring Webflux,Project Reactor,我试图用onErrorContinue从Flux/Mono中过滤异常,但它从未被触发 import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; import reactor.test.StepVerifier; class FluxOnErrorContinueTest { @Test public void fluxTest() { Flux<String> f

我试图用
onErrorContinue
从Flux/Mono中过滤异常,但它从未被触发

import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;


class FluxOnErrorContinueTest {

    @Test
    public void fluxTest() {
        Flux<String> fluxOne = Flux.just("one")
                .onErrorContinue(IllegalArgumentException.class, (ex, value) -> System.out.println("fluxOne: " + ex.getMessage()));
        Flux<String> fluxTwo = Flux.<String>error(() -> new IllegalArgumentException("error"))
                .onErrorContinue(IllegalArgumentException.class, (ex, value) -> System.out.println("fluxTwo: " +ex.getMessage()));
        Flux<String> fluxThree = Flux.just("three", "four", "five")
                .onErrorContinue(IllegalArgumentException.class, (ex, value) -> System.out.println("fluxThree: " +ex.getMessage()));

        Flux<String> sourceFlux = fluxOne.concatWith(fluxTwo).concatWith(fluxThree);

        Flux<String> filteredFlux = sourceFlux
                .onErrorContinue(IllegalArgumentException.class, (ex, value) -> System.out.println("filteredFlux: " + ex.getMessage()));

        StepVerifier.create(filteredFlux)
                .expectNextCount(4)
                .verifyComplete();

    }
}
如何筛选异常(尝试捕获等效项)

我还尝试了Mono和WebClient的响应


在Javadoc中提到了“错误模式支持Javadoc部分”,但我找不到该部分。您有任何链接吗?

这里的问题是测试中的
onErrorContinue
应用于整个
sourceFlux
。可能,您需要的是使用操作员从每个
发布者的故障中恢复,即
concatWith

    @Test
    public void fluxTest() {
        Function<Throwable, Publisher<String>> fallback = error -> {
            if (error instanceof IllegalArgumentException) {
                System.out.println(error.getMessage());
                return Flux.empty();
            } else {
                return Flux.error(error);
            }
        };

        Flux<String> sourceFlux = Flux.just("one")
                .concatWith(Flux.<String>error(() -> new IllegalArgumentException("error"))
                        .onErrorResume(fallback))
                .concatWith(Flux.just("three", "four", "five")
                        .onErrorResume(fallback));

        StepVerifier.create(sourceFlux)
                .expectNextCount(4)
                .verifyComplete();
    }

我尝试了两种方法,但是
onErrorContinue
没有被触发。嗯,您使用的是
onErrorResume
。是的,似乎不适合此任务。那么,在哪些情况下可以使用
onErrorContinue
?它甚至没有被触发(没有输出)。来自Javadoc:“让上游兼容的操作符通过从序列中删除有罪元素并继续后续元素来从错误中恢复。”
onErrorContinue
不是所有操作符都支持的(我相信Javadoc中提到了它)。顺便说一句,甚至没有提到
onErrorContinue
。因此,我建议明智地使用它,不要过分依赖它。
    @Test
    public void fluxTest() {
        Function<Throwable, Publisher<String>> fallback = error -> {
            if (error instanceof IllegalArgumentException) {
                System.out.println(error.getMessage());
                return Flux.empty();
            } else {
                return Flux.error(error);
            }
        };

        Flux<String> sourceFlux = Flux.just("one")
                .concatWith(Flux.<String>error(() -> new IllegalArgumentException("error"))
                        .onErrorResume(fallback))
                .concatWith(Flux.just("three", "four", "five")
                        .onErrorResume(fallback));

        StepVerifier.create(sourceFlux)
                .expectNextCount(4)
                .verifyComplete();
    }
    @Test
    public void fluxTest() {
        Function<Throwable, Publisher<String>> fallback = error -> {
            System.out.println(error.getMessage());
            return Flux.empty();
        };

        Flux<String> sourceFlux = Flux.just("one")
                .concatWith(Flux.<String>error(() -> new IllegalArgumentException("error"))
                        .onErrorResume(IllegalArgumentException.class, fallback))
                .concatWith(Flux.just("three", "four", "five")
                        .onErrorResume(IllegalArgumentException.class, fallback));

        StepVerifier.create(sourceFlux)
                .expectNextCount(4)
                .verifyComplete();
    }