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

相关推荐
Jesse_EC1 分钟前
我给消息推送加了 Publisher Confirm,然后亲手引入了一个竞态
java
S3rein2 分钟前
JAVA多线程手撕
java·多线程
用户8181870627464 分钟前
第7章 死锁排查实录:jstack定位死锁的完整流程
java·后端
逻辑帧5 分钟前
给 AI 时代找工作的同学一些实用建议
前端·后端
喵同志不止步于码农22 分钟前
Java Caffeine 快速入门
java·开发语言·后端·并发·缓存一致性
蜡台23 分钟前
Jetpack Compose 从入门到精通
android·前端·kotlin·compose·jepack
Java成神之路-23 分钟前
Java 并发灵魂拷问:notify/signal 唤醒顺序是规范还是实现?
java
Java牛马37 分钟前
Caffeine 缓存及其应用相关总结
java·redis·缓存·caffeine·数据一致性·本地缓存
学习星球1 小时前
Astro 全栈实战:拆解 RealWorld 项目
前端·javascript·架构·系统架构·前端框架·c5全栈
一只叫煤球的猫1 小时前
Spring AI 2.0 源码解析(三):ChatClient 的 Fluent API 如何构建请求?
java·后端·面试