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;     //公司名称
相关推荐
sorryhc8 分钟前
Vite开发环境按需编译是怎么实现的?
前端·javascript·vite
hunter19901015 分钟前
Spring线程池ThreadPoolTaskExecutor配置与实践
java·后端·spring
用户83562907805123 分钟前
C# 实现 XML 转 Excel:从解析到生成 XLSX 的详细步骤
后端·c#
nnnnna25 分钟前
props 、emits 、组件上的v-model(详细版)
前端·javascript
三年三月28 分钟前
Tailwind CSS 入门介绍
前端
余生H34 分钟前
前端技术新闻(WTN-1):React.js & Next.js 爆出 CVSS 10.0 级严重漏洞,历史风险回顾与代码级深度分析
前端·javascript·react.js
Jerry9527062836 分钟前
1.什么式可用性
java·分布式·后端·架构·高可用·秒杀
bcbnb37 分钟前
React Native 应用保护全链路实践 从 JS Bundle 到 IPA 层混淆的多维度安全方案
后端
1024肥宅37 分钟前
JavaScript 原生方法实现:数学与数字处理全解析
前端·javascript·ecmascript 6
烟袅42 分钟前
深入理解 JavaScript 内存机制与闭包原理
前端·javascript