Spring Boot REST API 如何传递含键值对列表的对象及解决反序列化报错
问题修复方案
错误根因
- 字段拼写不匹配:前端提交的字段名为
anwsers,和后端AnswerResponse实体定义的answers字段拼写不一致 - 数据结构完全不符合反序列化要求:前端传入的答案值是
{1: 2, 2: 1}格式的普通对象,且被手动包为字符串类型;但后端要求该字段为AnswerPair实体组成的数组,Jackson解析时遇到大括号开头的对象标记(START_OBJECT),无法将其反序列化为ArrayList<AnswerPair>类型,直接抛出解析错误。
修正后的前端实现
完全对齐后端实体的字段结构、类型、命名规则构造请求:
const examRequest = { examId: 10, timer: 100, // 修正字段拼写为answers,结构改为AnswerPair对象组成的数组 answers: [ { questionId: 1, keyAnswer: 2 }, { questionId: 2, keyAnswer: 1 } ] }; const submitData = (examRequest) => { const url = "/exams/submit"; return axios.post(url, examRequest); };
常见踩坑提醒
- 不需要手动将请求对象序列化为字符串:axios会自动将传入的JS对象转换为合规的JSON格式传递,手动拼接的字符串很容易出现JSON格式不合法、结构不匹配的问题
- 字段名必须和后端实体属性完全一致:包含拼写、大小写完全匹配,否则会因严格字段匹配规则导致后端接收的参数为null
- 数值类型保持对齐:后端定义的Long类型字段,前端传入整数即可,无需额外做类型转换
内容的提问来源于stack exchange,提问作者dacoten
相关产品推荐
相关产品推荐

