后端雪花算法主键ID传到前端变了

Mybatis Plus 的主键策略:

java 复制代码
    /**
     * id
     */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

这个主键策略会用雪花算法生成一个 19位的ID,比如 1791006670084734978

现象

后端生成的 id 是正常的,通过 swagger 文档此时获取到的 id 也和数据库中的 id 一致,但是在前端用 number 存储 id 之后发现变成了 179 100 667 008 473 4000

可能是因为 number 的精度只有16位,而雪花算法的精度是 19位,所以导致后面三位丢失了。

  1. 最暴力的做法,就是把id改为 string 类型,不过太复杂,可能会出现很多问题,会比较麻烦。

  2. 全局配置来让 Long类型转换为 JSON 中的string 类型

java 复制代码
@Configuration
public class JacksonConfig {

  @Bean
  @Primary
  @ConditionalOnMissingBean(ObjectMapper.class)
  public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
  {
    ObjectMapper objectMapper = builder.createXmlMapper(false).build();

    // 全局配置序列化返回 JSON 处理
    SimpleModule simpleModule = new SimpleModule();
    //JSON Long ==> String
    simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
    objectMapper.registerModule(simpleModule);
    return objectMapper;
  }

}
  1. 在 application.yml 中加配置
java 复制代码
spring:
  jackson:
    generator:
      write-numbers-as-strings: true  
  1. 在id 字段上加注解
java 复制代码
@JsonSerialize(using = ToStringSerializer.class)

文章来源:雪花算法生成的ID在返回给前端之后和生成的不一样,到底是什么原因?_雪花算法返给前端不准确-CSDN博客

相关推荐
xqqxqxxq几秒前
Java IO 核心:BufferedReader/BufferedWriter & PrintStream/PrintWriter 技术笔记
java·笔记·php
Aric_Jones2 分钟前
idea使用.env运行SpringBoot项目
java·spring boot·intellij-idea
Jing_Rainbow3 分钟前
【React-6/Lesson89(2025-12-27)】React Context 详解:跨层级组件通信的最佳实践📚
前端·react.js·前端框架
gustt3 分钟前
构建全栈AI应用:集成Ollama开源大模型
前端·后端·ollama
如果你好4 分钟前
UniApp 路由导航守卫
前端·微信小程序
im_AMBER6 分钟前
告别“玄学”UI:从“删代码碰运气”到“控制 BFC 结界”
前端·css
刘一说8 分钟前
Java 中实现多租户架构:数据隔离策略与实践指南
java·oracle·架构
千寻girling9 分钟前
《 MongoDB 教程 》—— 不可多得的 MongoDB
前端·后端·面试
攀登的牵牛花12 分钟前
前端向架构突围系列 - 状态数据设计 [8 - 3]:服务端状态与客户端状态的架构分离
前端
beata14 分钟前
Java基础-9:深入 Java 虚拟机(JVM):从底层源码到核心原理的全面解析
java·后端