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;     //公司名称
相关推荐
程序员cxuan几秒前
DeepSeek Harness 必装的插件公布了!
人工智能·后端·程序员
fatcoder18 分钟前
玩转Nginx 03 — location 匹配规则:让不同的路径各回各家
前端·后端·nginx
HjhIron22 分钟前
前端面试高频考点 —— TS 高级类型 & CSS 三列布局
前端
wno70422 分钟前
Spring Boot JdbcTemplate配置Druid多数据源
java·spring boot·后端
月才26 分钟前
Spring Boot 接口参数校验从入门到精通
后端
码农大叔的博客28 分钟前
golang示例:switch
开发语言·后端·golang
李剑一31 分钟前
《牛来》火了?我用ThreeJs实现了一个简易版的,代码全送给你,文章最后附演示效果
前端
Zane199433 分钟前
多开几个线程,为什么算数字反而没变快?一文讲透 CPython 的 GIL
后端·python
wear工程师33 分钟前
Spring Boot 服务挂了却没重启?先分清 systemd 的三次判断
spring boot
一只叫煤球的猫35 分钟前
Spring AI 2.0 源码解析(二):Starter 如何自动装配 ChatClient ?
后端·面试·langchain