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

相关推荐
小飞侠在吗2 分钟前
Vue customRef
前端·javascript·vue.js
xhxxx21 分钟前
别再让 AI 自由发挥了!用 LangChain + Zod 强制它输出合法 JSON
前端·langchain·llm
xing-xing32 分钟前
JVM 内存、直接内存、系统内存、本地内存、物理内存总结
java·jvm
yangpipi-32 分钟前
《C++并发编程实战》第5章 C++内存模型和原子操作
android·java·c++
指尖跳动的光33 分钟前
判断页签是否为活跃状态
前端·javascript·vue.js
用泥种荷花39 分钟前
【前端学习AI】大模型调用实战
前端
Lan.W1 小时前
element UI + vue2 + html实现堆叠条形图 - 横向分段器
前端·ui·html
FAQEW1 小时前
若依(RuoYi-Vue)单体架构实战手册:自定义业务模块全流程开发指南
前端·后端·架构·若依二开
神算大模型APi--天枢6461 小时前
合规与高效兼得:国产全栈架构赋能行业大模型定制,从教育到工业的轻量化落地
大数据·前端·人工智能·架构·硬件架构
千寻girling1 小时前
马上元旦节了,手写一个《前端脚手架》庆祝一下 !
前端