java - 如何在 Spring WebClient 中捕获 ConnectionException?

标签 java spring spring-webflux spring-webclient

我在 RestTemplate 中有以下错误处理:

try {
   restTemplate.postForObject(..);
} catch (ResourceAccessException e) {
   throw new CustomException("host is down");
}

问题:如何使用 spring WebClient 实现相同的功能?

try {
   webClient.post()...block();
} catch (Exception e) {
    //cannot check due to package private access
    //if (e instanceof Exceptions.ReactiveException)
    if (e.getCause() instanceof java.net.ConnectException) {
         throw new CustomException("host is down");
    }
}

问题:我无法直接捕获 ConnectionException,因为它包含在 ReactiveException 中。我能比对任何真正的底层异常应用多个 instanceof 检查更好吗?

最佳答案

您将 react 性地处理错误,将 onErrorMap 与您在谓词中所做的检查结合使用(参见 https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#onErrorMap-java.lang.Class-java.util.function.Function- )

注意:没有检查这是否编译,如果你愿意,你也可以用 instanceof 替换 isAssignableFrom 检查。

WebClient.post().....onErrorMap(t -> t.getCause.isAssignableFrom(ConnectException.class), t -> new CustomException("host is down"));

关于java - 如何在 Spring WebClient 中捕获 ConnectionException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57458858/

相关文章:

java - 如何在 Java 中解压缩目录中的所有 Zip 文件夹?

java - Arduino-处理 Serial.send/Serial.get 交互

java - 返回一个列表,我已经有一个rowmapper实现

java - 处理 Controller 方法签名处的异常

java - 根据Web服务调用结果过滤Flux元素

java - Reactive Mongo - DeleteAllBy...查询 - 找不到类型类 java.lang.Void 的 PersistentEntity

java - 如何创建可重用的测试代码而不创建循环依赖项?

java - while 对于迭代器 hashmap

spring - 如何通过使用异常处理程序注释将错误内容写入响应主体来处理 HttpMediaTypeNotAcceptableException?

java - 当客户端与热流断开连接时执行一些操作