如何将Spring Boot 3 RestClient错误响应体记录为可读字符串日志?
解决方法
你现在拿到的是响应体的字节数组,只需将其转换为UTF-8编码的字符串,就能得到和Postman中一致的可读格式,同时要注意处理IO异常。
修改后的代码如下:
import java.nio.charset.StandardCharsets; import java.io.IOException; // ... aRestClient.post() .uri(turl) .body(request) .retrieve() .onStatus(httpStatusCode -> httpStatusCode.value() == 400, (req, res) -> { try { String responseBody = new String(res.getBody().readAllBytes(), StandardCharsets.UTF_8); log.error("400错误响应体: {}", responseBody); // 若需要终止请求流程,可抛出异常: // throw new RuntimeException("请求失败: " + responseBody); } catch (IOException e) { log.error("读取响应体失败", e); } }) .body(LivinPointConvertResponse.class);
关键说明
- 用
new String(byte[], Charset)指定UTF-8编码,避免系统默认编码导致的乱码问题 - 必须捕获
IOException,因为readAllBytes()会抛出检查型异常,lambda中无法直接抛出这类异常 - 替换
System.out为日志框架输出,更符合生产环境的规范
你之前尝试的ex.getResponseBodyAsString()未生效,大概率是defaultStatusHandler没有精准捕获到对应异常或异常类型不匹配,用上述自定义onStatus处理逻辑可以更精准地捕获400状态的响应并处理。
内容的提问来源于stack exchange,提问作者Adi Prasetyo
相关产品推荐
相关产品推荐

