后端向前端传递Long类型数据,导致数据不一致

1. 背景:

后端商品实体的id字段为Long,从ES中查出封装,以Json的形式返回给前端。结果发现前端展示的的id全为 1244864296175140900。通过在后端打印查出的数据发现实际id有:1244864296175140890、1244864296175140889等等。
把后端打印的Json串放进在线Json工具,发现id也会变为1244864296175140900。

至此,排除了自己代码逻辑的问题。。。

2.原因:

当后端传Long类型给前端, Long类型数据大于17位时。前端拿到的数据: 第16位会四舍五入, 17位后的数据自动用0代替),在Json中就会出现精度丢失的情况。

哭了。。。

3.解决

(1)用String代替Long:
这种方式代价太大,数据库的id类型一般都会是bigint,对应Java中Long。
所以修改后需要修改很多地方。

(2)不修改Long类型,只在进行Json序列化时,以String的形式去序列化:
这种方式对原有代码不需要修改。
a. 使用SpringBoot的字段Json序列化方式:

	@JsonSerialize(using = ToStringSerializer.class)
    private Long skuId;

自己使用的是这种。
b. 使用FastJson的字段Json序列化方式

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值