后端雪花算法主键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博客

相关推荐
Full Stack Developme5 分钟前
Apache Tika 教程
java·开发语言·python·apache
杨先生哦19 分钟前
2026 热端攻防:AI 驱动 Web 前端安全全景透析
前端·笔记·安全·web安全
鹅城剑仙19 分钟前
Java线程池完全指南
java
李白的天不白21 分钟前
SmartAdmin(基于 Spring Boot 框架)中配置跨域请求 VUE3 设置请求头
java·前端
橙子进阶之路23 分钟前
Java线程(CompletableFuture)
java·开发语言
一个被程序员耽误的厨师23 分钟前
01-设计篇-我用前端那一套手艺造了一个AI-Native工具
前端·ai-native
鹅城剑仙31 分钟前
Java CompletableFuture 异步编程完全指南
java
2601_9618752434 分钟前
法考备考计划表|学习计划|资料已整理
java·开发语言·学习·eclipse·tomcat·c#·hibernate
不吃糖葫芦336 分钟前
vue3实现拓扑图编辑功能(谨以此纪念我当前的最后一份前端工作)
前端
大家的林语冰44 分钟前
超越 TypeScript,Flow 强势回归,语法高仿 TS,功能更丰富,类型更安全!
前端·javascript·typescript