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

问题描述

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

CREATE TABLE user

(

id BIGINT(20) NOT NULL COMMENT '主键ID',

#其他字段省略

);

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

@Data

public class User {

private Long id;

//其他成员变量省略

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

{

id:1297873308628307970,

//其他属性省略

}

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

求解决办法


回答:

来源: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转换成字符串的形式可解决


回答:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER

以上是 雪花算法ID到前端之后精度丢失问题 的全部内容, 来源链接: utcz.com/p/944423.html

回到顶部