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

Spring RestTemplate返回500错误时如何直接获取响应体不抛异常

问题根因

RestTemplate默认内置的DefaultResponseErrorHandler会对所有HTTP状态码为4xx、5xx的响应判定为请求错误,直接抛出对应HttpStatusCodeException子类异常,不会将响应体封装为正常方法返回值。你拿到的异常里携带的字符串就是接口实际返回的响应内容,只是被默认错误拦截逻辑拦截后没有走正常返回流程。

注意:你贴的原始代码存在重复声明Object obj的语法问题,编译阶段就会报错,需要删除重复的声明行。

可选解决方案

方案1:单接口捕获异常提取响应体

不需要修改RestTemplate全局配置,仅在当前调用逻辑中捕获HTTP错误异常,直接从异常对象中读取响应内容即可,适合仅个别接口需要读取错误响应的场景:

public Object pRequest(String url, Object requestBody) {
    Object obj = null;
    try {
        obj = restTemplate.patchForObject(url, requestBody, Object.class);
        System.out.println(obj);
    } catch (HttpServerErrorException | HttpClientErrorException e) {
        // 直接从异常中取出响应体字符串
        String errorResp = e.getResponseBodyAsString();
        System.out.println(errorResp);
        return errorResp;
    }
    return obj;
}

方案2:自定义全局错误处理器,关闭状态码异常抛出

如果项目中所有接口都需要正常拿到4xx/5xx的响应内容,不需要RestTemplate自动抛异常,可以替换默认的错误处理器,让所有响应都走正常返回流程:

  • 实现自定义的空处理错误处理器:
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.http.client.ClientHttpResponse;
import java.io.IOException;

public class IgnoreHttpErrorHandler implements ResponseErrorHandler {
    @Override
    public boolean hasError(ClientHttpResponse response) throws IOException {
        // 所有响应都不判定为错误
        return false;
    }

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        // 空实现,不抛出任何异常
    }
}
  • 给RestTemplate实例配置该处理器:
RestTemplate restTemplate = new RestTemplate();
// 注入自定义错误处理器
restTemplate.setErrorHandler(new IgnoreHttpErrorHandler());

配置完成后,修正语法问题的原调用逻辑即可正常打印响应内容,不会因为500状态码抛出异常:

public Object pRequest(String url, Object requestBody) {
    Object obj = restTemplate.patchForObject(url, requestBody, Object.class);
    System.out.println(obj);
    return obj;
}

注意:全局关闭错误抛出后,所有RestTemplate调用都不会再因为HTTP状态码异常报错,业务逻辑中需要自行根据响应内容判断请求是否成功,适合接口统一使用业务码标识请求结果、不依赖HTTP状态码判定错误的场景。

内容的提问来源于stack exchange,提问作者Ram-the-coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:06:22