【问题标题】:Where do I place "doOnError" in my webclient call?在我的网络客户端调用中,我应该在哪里放置“doOnError”?
【发布时间】:2022-01-25 20:20:03
【问题描述】:

我有一个看起来像这样的网络客户端调用:-

return this.webClient.post()
                .uri(url)
                .accept(MediaType.APPLICATION_JSON)
                .body(BodyInserters.fromValue(request))
                .retrieve()
                .bodyToMono(Reponse.class)
                .doOnError(err -> {
                    throw new UserDefinedException();
                })
                .block();

如果我在 bodyToMono/retreive/ 等之前放置“doOnError()”会有所不同吗..

【问题讨论】:

    标签: spring-boot spring-webclient


    【解决方案1】:

    将错误信号转换为自定义异常的预期方法是使用onErrorMap 运算符:

    return this.webClient.post()
                    .uri(url)
                    .accept(MediaType.APPLICATION_JSON)
                    .body(BodyInserters.fromValue(request))
                    .retrieve()
                    .bodyToMono(Reponse.class)
                    .onErrorMap(err -> new UserDefinedException())
                    .block();
    

    onErrorMap 运算符捕获任何Mono 错误并将它们映射到自定义异常。

    bodyToMono,在成功的情况下将链转换为Mono,所以它可能在onErrorMap之后。

    【讨论】:

    • 那么在你上面的例子中,onErrorMap 也会从retrieve() 中捕获错误吗?
    • @user1354825 是的。
    猜你喜欢
    • 2012-10-24
    • 1970-01-01
    • 2011-10-08
    • 2012-02-04
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多