前后端雪花算法Long转String丢失精度

雪花算法精度丢失问题了解
如图:数据库中 第一条记录 对应的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

猜你喜欢

转载自blog.csdn.net/weixin_62812758/article/details/129439153