后端id类型为long类型时,返回给前端浏览器四舍五入,导致id精度缺失问题

背景

今天在代码里,掉了别人写的接口,有个id的字段是long类型的,我这边加点参数返回给前端,然后前端根据id修改,结果修改的数据记录有,但是没起作用,后来发现根据他传给我的id在后台数据库查不到数据,然后发现,在浏览器控制台中后端响应的数据和前端预览的数据不一致,如下图

  • 预览数据(前端最后收到的)
    在这里插入图片描述
  • 响应数据(后端返回的)
    在这里插入图片描述

问题

我遇到的是一共19位,但后面两位会四舍五入然后变成00

原因

java中long值的范围,比JavaScript中的Number取值范围大,所以数据超出JavaScript中的Number取值范围时,精度会出现问题

JavaLong的取值范围为-92233720368547758089223372036854775807(即-2^64“ 到”2^64-1
JavaScript中的Number取值范围为-90071992547409929007199254740991 (即-2^532^53-1

解决方法

后端把long类型的,改成String字符串返回,序列化返回的时候,变成String类型

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值