背景

今天在代码里,掉了别人写的接口,有个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;
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐