背景
今天在代码里,掉了别人写的接口,有个id的字段是long类型的,我这边加点参数返回给前端,然后前端根据id修改,结果修改的数据记录有,但是没起作用,后来发现根据他传给我的id在后台数据库查不到数据,然后发现,在浏览器控制台中后端响应的数据和前端预览的数据不一致,如下图
- 预览数据(前端最后收到的)
- 响应数据(后端返回的)
问题
我遇到的是一共19位,但后面两位会四舍五入然后变成00
原因
java中long值的范围,比JavaScript中的Number取值范围大,所以数据超出JavaScript中的Number取值范围时,精度会出现问题
Java中Long的取值范围为-9223372036854775808到9223372036854775807(即-2^64“ 到”2^64-1)
JavaScript中的Number取值范围为-9007199254740992 到9007199254740991 (即-2^53 到2^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;