如何使用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
相关产品推荐
相关产品推荐

