Postman批量提交Anggota数据时JSON反序列化错误的解决方法
问题分析与解决方案
错误原因
- 类型不匹配:你的
createAnggota接口声明接收单个AnggotaDTO对象,但请求体传递的是AnggotaDTO数组,Jackson无法将数组反序列化为单个对象,因此抛出类型不匹配的解析错误。 - JSON格式不规范:请求体中的键名未使用双引号包裹,不符合JSON语法规范,虽然部分工具可能兼容,但严格来说会导致解析异常。
解决方案
1. 修改Controller,新增批量创建接口
将接口参数改为接收List<AnggotaDTO>,并实现批量保存逻辑:
// API 批量创建Anggota @PostMapping("/anggota/create/batch") public Map<String, Object> createBatchAnggota(@RequestBody List<AnggotaDTO> anggotaDTOList) { Map<String, Object> mapResult = new HashMap<>(); List<Anggota> anggotaList = new ArrayList<>(); for (AnggotaDTO dto : anggotaDTOList) { Anggota anggota = convertAnggotaToEntity(dto); // 若ModelMapper已正确映射字段,可省略以下两行手动赋值 anggota.setAnggotaNama(dto.getAnggotaNama()); anggota.setAnggotaUsia(dto.getAnggotaUsia()); anggotaList.add(anggota); } // 使用JPA的批量保存方法 List<Anggota> savedAnggotaList = anggotaRepository.saveAll(anggotaList); mapResult.put("message", "批量创建成功"); mapResult.put("data", savedAnggotaList); mapResult.put("total", savedAnggotaList.size()); return mapResult; }
2. 修正请求体的JSON格式
确保所有键名用双引号包裹,符合JSON语法要求:
[ { "anggotaNama": "AAA", "anggotaUsia": 16 }, { "anggotaNama": "BBB", "anggotaUsia": 17 }, { "anggotaNama": "CCC", "anggotaUsia": 18 } ]
3. Postman请求配置
- 请求方法:POST
- 请求URL:
/api/anggota/create/batch - 请求体类型:Raw → JSON
- 粘贴修正后的JSON数组
额外优化建议
- 保留原有的单个创建接口,新增批量接口,同时支持两种创建方式。
- 检查
Anggota实体与AnggotaDTO的字段映射,若字段名完全一致,可删除手动赋值代码,直接依赖ModelMapper的自动映射。
内容的提问来源于stack exchange,提问作者Moh Zakaria
相关产品推荐
相关产品推荐

