雪花算法ID到前端之后精度丢失问题

问题描述

小伙伴建了一张表,表的主键是id BigINT,用来存储雪花算法生成的ID

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
        #其他字段省略
);

使用Long 类型对应数据库ID数据。嗯,也没有问题,雪花算法生成的就是一串数字,Long类型属于标准答案!

@Data
public class User {
    private Long id;
//其他成员变量省略

在后端下断点。看到数据响应以JSON响应给前端,正常

{
id:1297873308628307970,
//其他属性省略
}

最后,这条数据返回给前端,前端接收到之后,修改这条数据,后端再次接收回来。奇怪的问题出现了:后端重新接收回来的id变成了:12978733086283000000,不再是1297873308628307970

求解决办法

阅读 5.7k
3 个回答

来源:https://github.com/flyhero/sp...
解决方案:将所有长整型序列号为字符串型,对前端无影响。
代码:如果你使用spring、jackson的话。

@Configuration
public class JacksonConfig implements InitializingBean{

    @Resource
    ObjectMapper objectMapper;

    private SimpleModule getSimpleModule() {
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        return simpleModule;
    }

    @Override
    public void afterPropertiesSet() {
        SimpleModule simpleModule = getSimpleModule();
        objectMapper.registerModule(simpleModule);
    }
}

项目中也遇到这个问题,返给前端的id转换成字符串的形式可解决

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏