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

使用RestTemplate提交JSON数组时出现400(HTTP消息不可读)错误

解决RestTemplate提交JSON数组报400(HTTP message not readable)错误

嘿,这个问题我一眼就看出来了——你提交的是单个BaseData对象,但后端接口期望接收的是JSON数组格式的数据,格式不匹配直接导致后端无法解析请求体,所以抛出了400错误。

先给你拆解下问题出在哪:

  • 你代码里构造的HttpEntity里放的是单个BaseData实例,RestTemplate会自动把它序列化成{"timestamp":xxx, "sysValue":xxx, "meanValue":xxx}这种单个JSON对象;
  • 但你给出的目标JSON是数组格式[{"timestamp":1521549412000, "sysValue": 80, "meanValue": 120}],后端接口显然是按数组来解析的,自然就报错了。

具体修复步骤

  1. 把单个对象包装成集合
    先把你的BaseData实例放进List或者数组里,比如:

    BaseData baseData = new BaseData();
    baseData.setSysValue(80);
    baseData.setMeanValue(120);
    baseData.setTimeStamp(System.currentTimeMillis());
    
    // 把单个对象放进List,转换成集合形式
    List<BaseData> dataList = new ArrayList<>();
    dataList.add(baseData);
    
  2. 修改HttpEntity的泛型类型
    把HttpEntity<BaseData>改成HttpEntity<List<BaseData>>,这样RestTemplate会自动把集合序列化成JSON数组:

    // 注意这里的泛型改成List<BaseData>
    HttpEntity<List<BaseData>> entity = new HttpEntity<>(dataList, headers);
    RestTemplate restTemplate = RestTemplate.getRestTemplate();
    // 发送POST请求(根据你的实际接口方法调整)
    ResponseEntity<String> response = restTemplate.postForEntity("你的接口URL", entity, String.class);
    
  3. 额外需要确认的细节

    • 确保请求头里已经设置了Content-Type: application/json,不然后端可能识别不了JSON格式:
      HttpHeaders headers = new HttpHeaders();
      headers.setContentType(MediaType.APPLICATION_JSON);
      
    • 如果BaseData的字段名和JSON里的命名有差异(比如timeStamp对应JSON里的timestamp),记得加上Jackson的注解,比如@JsonProperty("timestamp")在timeStamp字段上,避免序列化后字段名不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:59:39