雪花算法ID到前端之后精度丢失问题
问题描述
小伙伴建了一张表,表的主键是id BigINT,用来存储雪花算法生成的ID
CREATE TABLE user(
id BIGINT(20) NOT NULL COMMENT '主键ID',
#其他字段省略
);
使用Long 类型对应数据库ID数据。嗯,也没有问题,算法" title="雪花算法">雪花算法生成的就是一串数字,Long类型属于标准答案!
@Datapublic class User {
private Long id;
//其他成员变量省略
在后端下断点。看到数据响应以JSON响应给前端,正常
{id:1297873308628307970,
//其他属性省略
}
最后,这条数据返回给前端,前端接收到之后,修改这条数据,后端再次接收回来。奇怪的问题出现了:后端重新接收回来的id变成了:12978733086283000000,不再是1297873308628307970
求解决办法
回答:
来源:https://github.com/flyhero/sp...
解决方案:将所有长整型序列号为字符串型,对前端无影响。
代码:如果你使用spring、jackson的话。
@Configurationpublic 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转换成字符串的形式可解决
回答:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER
以上是 雪花算法ID到前端之后精度丢失问题 的全部内容, 来源链接: utcz.com/p/944423.html