You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot接口返回Long类型值与原值不一致问题咨询

问题原因

该问题是前端JSON解析时的精度丢失问题,和Java服务端无关:
JavaScript的Number类型采用双精度64位浮点数存储,能精确表示的整数范围为 -(2^53 - 1) ~ 2^53 - 1(即-9007199254740991 ~ 9007199254740991)。
Java的Long类型是64位有符号整数,Random().nextLong()生成的数值最大值可达9e18,一旦生成的Long值超出上述JavaScript可精确表示的整数范围,前端解析JSON时会自动对超出精度的部分做四舍五入处理,就会出现你观测到的接口返回的Long值和字符串值不一致的情况。
而Random().nextInt()生成的是32位整数,最大值仅为231-1(约21亿),远小于253的精度阈值,因此不会触发精度丢失问题。

解决方案

以下方案任选其一即可避免该问题:

  • 字段单独注解配置:在需要返回的Long类型ID字段上添加@JsonFormat(shape = JsonFormat.Shape.STRING)或者@JsonSerialize(using = ToStringSerializer.class)注解,指定Jackson序列化该字段时直接转为字符串输出。
  • 全局序列化配置:SpringBoot项目中可全局配置Jackson的序列化规则,对所有Long类型字段统一序列化为字符串,无需逐个字段修改,适合业务ID全为Long类型的场景。
  • 前端直接使用字符串字段:如果已经同步返回了Long对应的字符串版本字段,前端逻辑直接读取字符串类型的字段值即可,无需解析数值类型的Long字段。

内容的提问来源于stack exchange,提问作者chaosKP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:27:04