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

如何使用Spring解析JSON文件 测试反序列化报错及400问题如何解决

问题修复方案

错误根因

该报错和框架配置无关,是测试代码逻辑错误导致:
你在构造请求体时调用 writeValueAsString(file) 直接传入了File对象做序列化,最终请求携带的不是JSON文件内的实体数组内容,而是File对象序列化后生成的文件路径字符串。后端接口预期接收List<Dto>类型的JSON数组,反序列化时识别到入参是字符串类型,直接抛出类型不匹配错误,后续返回的400状态码就是参数非法的标准响应。

修复代码

修改测试代码,直接读取JSON文件的真实内容作为请求体即可:

void testTowns() throws Exception {
        var mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
        var file = new File("src/test/resources/data/towns.JSON");
        var postRequest = MockMvcRequestBuilders.post("/towns")
                // 直接读取JSON文件的字节内容作为请求体,不要序列化File对象
                .content(Files.readAllBytes(file.toPath()))
                .contentType(APPLICATION_JSON);
        mockMvc.perform(postRequest).andExpect(status().isOk());
}

其他注意事项

  • 你当前定义的Dto、StreetDto为静态内部类,已经添加了无参构造和@Data注解,满足Jackson反序列化要求,无需额外调整
  • 注意检查Service层的saveTows方法是否为笔误,正确命名应为saveTowns,该问题不会触发当前报错,但后续逻辑执行会抛出方法不存在异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 09:15:04