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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:35:05