SpringBoot雪花算法主键ID传到前端后精度丢失问题的解决

Java后端Long类型的范围

-263~263,即:-9223372036854775808~9223372036854775807,它是19位的。

这个数字可以通过方法获得:Long.MAX_VALUE、Long_MIN_VALUE。

前端JS的数字类型的范围

-253~253,即:-9007199254740991~9007199254740991,它是16位的。

这个数字可以通过方法获得:Number.MAX_SAFE_INTEGER、Number.MIN_SAFE_INTEGER。

结论

可见,Java后端的Long宽度大于前端的。雪花算法一般会生成18位或者19位宽度的数字,那么这时就会出问题。

解决方法

实体类entity增加@JsonSerialize注解

java 复制代码
@Data
@TableName("tb_course_base")
public class Course {
    //序列化时,不采用long类型,而采用string类型,防止雪花精度丢失问题
    @JsonSerialize(using= ToStringSerializer.class)
    @TableId(type = IdType.ASSIGN_ID)   //主键生成策略,雪花
    private Long id;
    private Long companyId;         //公司编号
    private String companyName;     //公司名称
相关推荐
一点一木15 小时前
2026 终端 AI 编码 Agent 六大工具深度横评
前端·人工智能·claude
Highcharts.js15 小时前
Highcharts React v5升级三问|最大的升级方向是什么?需要注意什么?有什么优化?
前端·javascript·react.js·前端框架·highcharts·大数据渲染·前端性能
马玉霞15 小时前
vue web端页面组件展示
前端·vue.js
代码煮茶15 小时前
Vue3 权限系统实战 | 从 0 搭建完整 RBAC 权限管理
前端·javascript·vue.js
Rust研习社15 小时前
Rust 的 move 语义,一次讲透
后端·rust·编程语言
IT_陈寒15 小时前
用了Vue的动态组件之后,我被坑得找不着北
前端·人工智能·后端
undefinedType15 小时前
深入理解 Rails includes:为什么一个 order(users.xxx) 会导致超级 JOIN 性能问题
后端
阳火锅15 小时前
💡 告别类名地狱!Tailwind CSS 语义化转换神器来了
前端·css·vue.js
ricardo197316 小时前
Core Web Vitals 全解:LCP / INP / CLS 逐个击破
前端
VillenK16 小时前
版本依赖问题:vite-plugin-dts@3.1.0 与 jiti 的兼容性
前端·typescript·vite