数据类型差异
JavaScript 里只有一种数值类型 Number
,它遵循 IEEE 754 双精度 64 位浮点数标准。该标准将 64 位划分为不同部分,其中 1 位是符号位,11 位是指数位,52 位是尾数位。整数在这种存储方式下,能精确表示的最大安全整数是 2^53 - 1
,也就是 9007199254740991
。一旦数值超过这个范围,就无法精确表示,从而造成精度丢失。
数值范围问题
Java 等后端语言的 long
类型通常是 64 位整数,其取值范围为 -2^63
到 2^63 - 1
,远大于 JavaScript 中 Number
类型能精确表示的范围。当后端返回的 long
类型数值超出了 JavaScript 的最大安全整数范围,前端在接收和处理时,就会自动将其转换为 Number
类型,这样就会丢失精度。
解决方案1

可以通过@JsonSerialize注解,这个注解会将Long类型先转换成String再进行序列化,
解决方案2
通过配置json序列化器自动转换
