JSON序列化时undefined值导致字段静默丢失,对象中undefined属性被完全删除,数组中undefined元素转为null,需通过比对前后端原始JSON确认是否前端序列化阶段丢失。
当后端收不到某些字段、或字段值突然“消失”,而前端代码明确写了该字段且值为 undefined,大概率就是 JSON 序列化时它被静默忽略了——这不是报错,而是“无声丢失”,所以特别容易被误判为后端漏处理或网络丢包。
直接打印 JSON.stringify(obj) 的输出,重点检查预期存在的 key 是否完全没出现:
undefined 值 → 对应属性整个被删掉JSON.stringify({ name: undefined, age: 25 }) → {"age":25}(name 键没了)undefined 元素 → 被转成 null,键还在但值变了JSON.stringify({ list: [undefined, "a"] }) → {"list":[null,"a"]}
在前端发请求前加一句:console.log('发送数据:', JSON.stringify(payload))
再在后端(如 SpringBoot 的 @RequestBody 日志或网关层)打印收到的原始 JSON 字符串。两者不一致,且缺失字段恰好是前端变量未赋值/条件分支未覆盖的位置,就可锁定问题。
常见表现包括:
MissingServletRequestParameterException 或 Jackson 反序列化跳过字段,导致 DTO 中对应字段为默认值(如 0、false、null)field 'xxx' is required but missing”,但前端确认传了NULL 或空字符串在 DevTools 的 Network 标签页里,找到对应请求 → 点开 → 查看 Payload 或 Request Body:
"value": null),但后端没收到,那问题可能出在 Content-Type 头、反序列化配置或中间件过滤上关键点在于:undefined 不会触发语法错误,也不会让请求失败,它只是“悄悄走掉”。识别它靠的是主动比对和观察字段是否存在,而不是等报错。