为何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
相关产品推荐
相关产品推荐

