REST/JSON响应字段为何会被浏览器静默递增?
排查REST/JSON字段被浏览器静默递增的问题
嘿,针对你遇到的React应用从Spring Boot接口获取数据时,JSON字段被浏览器静默递增的问题,我来帮你梳理最可能的原因和排查方向!
1. 大整数精度丢失(最大概率的元凶)
你提到的id字段值是20180501150819347——这是一个17位的长整数,而JavaScript的Number类型有个天生的局限:它只能精确表示小于等于2^53 - 1(也就是9007199254740991)的整数。一旦数字超过这个阈值,JS会自动将其近似为最接近的可表示值,看起来就像是字段被“静默递增”了。
- 快速验证:打开浏览器控制台,直接输入这个id值,看看输出结果:
console.log(20180501150819347); // 大概率会输出 20180501150819348 - 解决办法:
- 后端调整:在Spring Boot实体类中,给
id字段添加Jackson注解,强制序列化为字符串:@JsonProperty("id") @JsonSerialize(using = ToStringSerializer.class) private Long id; - 前端适配:如果后端暂时无法修改,可以在请求时用
response.text()替代response.json(),手动解析JSON并保留id的字符串形式,避免自动转成Number类型。
- 后端调整:在Spring Boot实体类中,给
2. 前端逻辑的意外修改
检查你的React代码或状态管理库(比如Redux、Zustand)中,是否存在对实体字段的误操作:
- 有没有在处理列表数据时,不小心给
id加了自增逻辑? - 有没有使用第三方UI组件(比如表格组件)自动生成索引,和原
id字段混淆了? - 排查步骤:在请求成功后立刻打印原始响应数据(比如在
axios的then回调里console.log(response.data)),对比渲染到页面的数据,定位字段修改的环节。
3. 后端序列化/传输异常
虽然概率较低,但也可以确认后端输出的原始数据是否正确:
- 打开浏览器的Network面板,找到对应的REST请求,查看Response里的
id值是否和预期一致。 - 如果Network里的响应就已经错误,那要排查Spring Boot的Jackson配置,或者生成
id的业务逻辑是否存在问题。
内容的提问来源于stack exchange,提问作者snowjak
相关产品推荐
相关产品推荐

