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;     //公司名称
相关推荐
滕青山3 分钟前
腾讯域名拦截查询 在线工具核心JS实现
前端·javascript·vue.js
Qinana5 分钟前
从 URL 输入到页面展示:一场跨越进程与协议的“装修”大戏
前端·面试·程序员
不会敲代码18 分钟前
从零开始用 TypeScript + React 打造类型安全的 Todo 应用
前端·react.js·typescript
苏三说技术11 分钟前
Prompt、Agent、Function Call、Skill、MCP,傻傻分不清楚?
后端
gyx_这个杀手不太冷静17 分钟前
让 AI 替你写代码:OpenCode 完全配置与高效使用手册
前端·ai编程
小码哥_常21 分钟前
Spring Boot接口幂等保护:一个注解开启数据一致性守护
后端
我叫黑大帅22 分钟前
Go中的interface的两大用法
后端·面试·go
龙猫不热23 分钟前
从 0 手写 Promise:拆解 Promise 链式调用的实现原理
前端·javascript·面试
神秘的猪头26 分钟前
🚀 React 开发者进阶:RAG 核心——手把手带你玩转 Milvus 向量数据库
数据库·后端·llm
navms26 分钟前
NameServer 极简设计的哲学
后端