You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Http Client Interface在40X/50X错误时返回ResponseEntity

解决WebClient HttpServiceProxyFactory返回ResponseEntity时不抛出4xx/5xx异常的问题

要让你的FooInterface方法返回携带错误状态码的ResponseEntity而非抛出WebClientResponseException,核心是修改WebClient的错误处理逻辑,阻止它对4xx/5xx响应自动抛出异常,具体步骤如下:

1. 配置WebClient的错误处理器

在构建WebClient实例时,通过defaultStatusHandler指定对所有错误状态码(4xx/5xx)不抛出异常,而是继续传递响应供后续包装为ResponseEntity:

WebClient webClient = WebClient.builder()
        // 对所有HTTP错误状态码,返回空Mono以跳过异常抛出逻辑
        .defaultStatusHandler(HttpStatus::isError, clientResponse -> Mono.empty())
        .build();

2. 用配置后的WebClient创建代理工厂

保持原有的代理工厂创建逻辑,使用上面配置好的WebClient即可:

HttpServiceProxyFactory factory = HttpServiceProxyFactory
        .builderFor(WebClientAdapter.create(webClient))
        .build();

return factory.createClient(FooInterface.class);

原理说明

HttpServiceProxyFactory默认会使用WebClient的retrieve()方法处理请求,该方法的默认行为是对4xx/5xx响应抛出WebClientResponseException。通过配置defaultStatusHandler,我们覆盖了这一默认行为,让WebClient将所有响应(包括错误状态码的响应)都传递下去,这样代理就能将响应完整包装为ResponseEntity返回,其中包含对应的状态码和响应体(如果存在)。

内容的提问来源于stack exchange,提问作者Alan Moffet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:44:58