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

如何使用RestTemplate发送不转义双引号的JSON POST请求

问题原因
  • 重复序列化导致双引号转义:你已经手动用ObjectMapper将对象转为了JSON字符串,RestTemplate内置的JSON消息转换器会再次对传入的String类型参数做序列化处理,最终导致JSON内的双引号被自动加上反斜杠转义,服务端无法正常识别JSON结构。
  • 请求体结构不符合接口要求:服务端报错提示'[{...},{...},{...}]' is not of type 'object',说明目标接口要求的请求根节点是JSON对象,你直接传入了报表列表的JSON数组,结构不匹配。
修复方案

最推荐的方式是直接传入Java对象,交由RestTemplate自动完成序列化,避免手动处理JSON导致的重复转义问题,同时适配接口要求的对象结构:

  1. 先构造和接口要求对齐的请求体包装类
// 若没有使用lombok,自行补充getter、setter和构造方法
@Data
public class ReportRequest {
    // 如果接口要求字段为大驼峰,可直接加@JsonProperty("Reports")指定序列化名称
    private List<Report> reports;

    public ReportRequest(List<Report> reports) {
        this.reports = reports;
    }
}
  1. 调整请求代码
// 构造符合接口结构的请求对象,不用手动转JSON
ReportRequest requestBody = new ReportRequest(reportsJson);

var headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(getToken());

// 直接传入Java对象,RestTemplate会自动完成序列化,不会出现转义问题
HttpEntity<ReportRequest> entity = new HttpEntity<>(requestBody, headers);
var response = restTemplate.exchange(API_URL, HttpMethod.POST, entity, ReportResponse.class);

如果需要保留手动序列化的逻辑,也可以将序列化后的JSON转为字节数组传入,跳过RestTemplate的二次序列化处理:

String postBody;
try {
    // 先将列表包装为对象再序列化,适配接口要求的根节点结构
    ReportRequest requestObj = new ReportRequest(reportsJson);
    postBody = objectMapper.copy()
        .setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE)
        .writeValueAsString(requestObj);
} catch (JsonProcessingException e) {
    log.error("Failed to serialize report.", e);
    throw new IllegalArgumentException(e);
}

var headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(getToken());

// 传入字节数组,RestTemplate会直接发送原生JSON内容,不会做二次处理
HttpEntity<byte[]> entity = new HttpEntity<>(postBody.getBytes(StandardCharsets.UTF_8), headers);
var response = restTemplate.exchange(API_URL, HttpMethod.POST, entity, ReportResponse.class);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:39:03