【问题标题】:WebClient reactor.core.Exceptions$ErrorCallbackNotImplementedWebClient reactor.core.Exceptions$ErrorCallbackNotImplemented
【发布时间】:2020-05-22 18:11:18
【问题描述】:

所以我有以下代码可以对远程机器执行 GET:

webClient.get()
            .uri(myUri)
            .accept(MediaType.APPLICATION_JSON)
            .retrieve()
            .bodyToMono(String.class)
            .subscribe(text -> {
                LOG.info(text);
            });

我得到这个异常,没问题,我期待它,但很难找到任何文档如何处理这些错误:

reactor.core.Exceptions$ErrorCallbackNotImplemented: java.net.UnknownHostException

【问题讨论】:

    标签: java spring webclient


    【解决方案1】:

    要处理这些异常,您需要添加以下内容,使其适应您的情况(在我的情况下,如果我收到 unkownHostException,我只需记录一个请求的服务不存在的警告:

    webClient.get()
                .uri(myUri)
                .accept(MediaType.APPLICATION_JSON)
                .retrieve()
                .bodyToMono(String.class)
                .onErrorResume(e -> {
                    if (e instanceof UnknownHostException) {
                        LOG.warn("Failed to get myStuff, desired service not present");
                    } else {
                        LOG.error("Failed to get myStuff");
                    }
                    return Mono.just("Encountered an exception");
                })
                .subscribe(text -> {
                    LOG.info(text);
                });
    

    您处理错误,并将某些内容发送到下一步。我真的希望有一种方法可以停下来,并且不会将任何东西传递到管道中。

    【讨论】:

    • 您始终可以使用Mono.empty()(而不是Mono.just("Encountered an exception"))继续,因此不会通过管道传递任何内容。
    • 返回 Mono.empty() 是要走的路,因为它会根据您的需要生成一个 Mono 类型,但这会在不发出任何事件的情况下完成,因此管道会停在那里,这就是您需要的在大多数情况下都是这样。
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2020-05-18
    • 2018-05-09
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多