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;     //公司名称
相关推荐
geovindu9 分钟前
go:Bit Operation Algorithm
开发语言·后端·算法·golang·位运算法
小黑技术栈13 分钟前
关于前端的一些话
前端
元界metalite20 分钟前
Spring-AOP切面越写越多怎么办-8类场景的一条有序处理器链
后端
有米97920 分钟前
Logstash的安装和Elasticsearch的整合
后端
newerp21 分钟前
reflect.Value 与动态值操作
后端
jinzhe23 分钟前
终端bash&zsh中实现基于前缀的历史命令搜索
后端
用户81818706274632 分钟前
二、多线程并发篇
后端·程序员
Zane199432 分钟前
ThreadLocal 与 BlockingQueue:线程本地变量的内存泄漏原理,以及阻塞队列怎么选?
java·后端
用户31268748772033 分钟前
Spring Bean 生命周期到底经历了什么?从实例化到销毁的全链路拆解
java·spring boot
橘色的喵33 分钟前
一块 RISC-V MCU 是怎么启动的: 内存保护、中断与从 Flash 直接执行
后端