前后端雪花算法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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值