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

Spring RestTemplate 401响应被屏蔽(无响应体)问题及解决问询

解决RestTemplate无法获取401响应体的问题

问题原因

Spring的DefaultResponseErrorHandler在处理401(Unauthorized)响应时,出于安全设计默认不会保留响应体,导致捕获HttpClientErrorException时无法获取到外部API返回的JSON内容,即使实际响应存在body。

可行解决办法

自定义响应错误处理器,覆盖默认逻辑,确保401响应的body被读取并封装到异常中:

1. 实现自定义ResponseErrorHandler

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.HttpClientErrorException;

import java.io.IOException;

public class Custom401ResponseErrorHandler extends DefaultResponseErrorHandler {

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        // 提前读取响应体、头信息和状态码
        byte[] body = getResponseBody(response);
        HttpHeaders headers = response.getHeaders();
        HttpStatus statusCode = response.getStatusCode();

        try {
            // 调用默认处理逻辑
            super.handleError(response);
        } catch (HttpClientErrorException e) {
            // 重新构建异常,携带完整响应体
            throw HttpClientErrorException.create(
                    statusCode,
                    e.getStatusText(),
                    headers,
                    body,
                    e.getCharset()
            );
        }
    }
}

2. 注册到RestTemplate

将自定义错误处理器配置到你的RestTemplate实例中:

// 直接实例化时设置
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new Custom401ResponseErrorHandler());

// 或者Spring Bean配置方式
@Bean
public RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setErrorHandler(new Custom401ResponseErrorHandler());
    return restTemplate;
}

3. 验证效果

配置完成后,再次捕获HttpClientErrorException时,e.getResponseBodyAs(responseType)就能正常将401的JSON响应转换为目标Java对象,日志中也不会再显示[no body]。

补充说明

如果不想自定义处理器,也可以通过反射获取HttpClientErrorException中的私有响应体字段,但这种方式依赖Spring内部实现,版本升级时可能失效,因此不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:47:41