Spring WebClient捕获ReadTimeoutException异常的问题咨询
Spring WebClient超时异常捕获处理
是的,你需要改为捕获WebClientRequestException。Spring WebClient在处理底层Netty通信异常时,会将诸如ReadTimeoutException这类原始异常封装到WebClientRequestException中抛出,不会直接抛出Netty的原始异常类型。
要判断该异常是否由ReadTimeoutException导致,可以通过以下方式:
- 调用
WebClientRequestException.getCause()获取底层触发的异常 - 判断该异常实例是否为
ReadTimeoutException
修改后的代码示例:
try { List<Asset> assets = client.searchAssets("some-type", assetCode); // do something } catch (WebClientRequestException ex) { if (ex.getCause() instanceof ReadTimeoutException) { log.error("Read timeout occurred, can't wait any longer :)", ex); } else { // 处理其他WebClient请求异常场景 log.error("WebClient request failed", ex); } }
如果需要追溯最底层的异常(比如存在多层封装的情况),可以借助Apache Commons Lang的ExceptionUtils.getRootCause(ex)方法来获取根源异常后再做判断,但多数WebClient超时场景下,直接通过getCause()就能拿到目标的ReadTimeoutException。
内容的提问来源于stack exchange,提问作者Carlos Gonzalez
相关产品推荐
相关产品推荐

