使用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}],后端接口显然是按数组来解析的,自然就报错了。
具体修复步骤
把单个对象包装成集合
先把你的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);修改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);额外需要确认的细节
- 确保请求头里已经设置了
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
相关产品推荐
相关产品推荐

