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

为何RestTemplate.exchange未返回null但response变量却为null?

嘿,我来帮你捋清楚这个问题~

问题根源解析

咱们先拆解你的代码逻辑:
你一开始把response(哦对,你代码里拼写成reponse了,小细节)初始化为null,然后在try块里尝试给它赋值。但这里有个核心逻辑漏洞:如果restTemplate.exchange()抛出HttpStatusCodeException异常,那赋值语句response = restTemplate.exchange(...)根本不会执行完成——异常会直接跳转到catch块,这时候response还是你一开始设置的null值。

你觉得exchange调用结果不为null,应该是指请求成功时它确实返回非null的响应,但一旦触发4xx/5xx这类状态码异常,赋值动作就被中断了,所以catch块里打印的自然是初始的null。

怎么解决?

如果你想在catch块里拿到异常对应的响应信息,不用盯着那个没赋值的response变量,直接用异常对象e就行——它本身就封装了所有错误响应的细节:

ResponseEntity<Object> response = null;
try {
    response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, Object.class);
} catch (HttpStatusCodeException e) {
    // 从异常中提取错误响应实体
    ResponseEntity<Object> errorResponse = ResponseEntity.status(e.getStatusCode())
            .headers(e.getResponseHeaders())
            .body(e.getResponseBodyAs(Object.class));
    System.out.println("错误响应内容: " + errorResponse);
    // 也可以单独打印状态码、响应头这些信息
    System.out.println("响应状态码: " + e.getStatusCode());
}

另外建议把变量名改成正确的response,避免后续因为拼写问题踩坑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:23:41