雪花算法精度丢失问题了解:
如图:数据库中 第一条记录 对应的ID为 839812083406077952
正常情况前端展示应该是这个样子
但是由于JavaScript 在计算机中,数字先转二进制,然后运算,最后转十进制 转换过程中导致丢失的
感兴趣的朋友可以观看https://blog.csdn.net/qq_35271556/article/details/80137474
https://blog.csdn.net/weixin_35773751/article/details/126012076
这里直接贴出解决办法
要想解决这个问题,也很简单,我们只需要让js处理的ID数据类型为字符串类型即可, 这样就不会损失精度了。我们只需要让分页查询返回的json格式数据库中, long类型的属性, 不直接转换为数字类型, 转换为字符串类型就可以解决这个问题了
一般情况下全局就可以解决,但是有些特别业务需求就需要使用自定义,局部优先级高于全局。
第一种全局解决编写一个配置类、
创建Jackson2ObjectMapperBuilderCustomizer对象
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
/**
* @author
*/
@Configuration
public class JacksonConfig {
/**
* Jackson全局转化long类型为String,解决jackson序列化时long类型缺失精度问题
*
* @return Jackson2ObjectMapperBuilderCustomizer 注入的对象
*/
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
Jackson2ObjectMapperBuilderCustomizer cunstomizer = new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.serializerByType(Long.TYPE, ToStringSerializer.instance);
jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
}
};
return cunstomizer;
}
}
转 https://blog.csdn.net/qq_41681904/article/details/123426503