Long类型数据在序列化时,若数值超过JavaScript的Number类型最大安全整数2^53-1,会导致精度丢失。为解决这个问题,可以采取以下几种方法:
使用注解转换类型:
在Java后端,可以使用Jackson库的@JsonSerialize或@JsonFormat注解,将Long类型的字段在序列化为JSON时转换为String类型,避免精度丢失。
声明一个配置类
添加如下配置
public void initMapper(List<ObjectMapper> objectMappers) {
//其他配置项
// 1.1 创建 SimpleModule 对象
SimpleModule simpleModule = new SimpleModule();
simpleModule
// 新增 Long 类型序列化规则,数值超过 2^53-1,在 JS 会出现精度丢失问题,因此 Long 自动序列化为字符串类型
.addSerializer(Long.class, NumberSerializer.INSTANCE)
.addSerializer(Long.TYPE, NumberSerializer.INSTANCE)
// 1.2 注册到 objectMapper
objectMappers.forEach(objectMapper -> objectMapper.registerModule(simpleModule));
}
全局处理:
配置Jackson的ObjectMapper,将所有Long类型的数据都转换为字符串类型,这是一种通用的方法。
自定义序列化和反序列化:
通过在类中添加writeObject和readObject方法,自定义属性的序列化和反序列化逻辑,指定使用String类型进行序列化。
这些方法可以有效避免Long类型数据在前端JavaScript中的精度丢失问题。
注意:本文归作者所有,未经作者允许,不得转载