Json Long 类型精度丢失

1.现象

在 SpringBoot 项目中,使用 Jackson 将Java 对象转为 Json 传给前端,但 Java 对象有 Long 类型字段,传给前端后会出现精度丢失的现象。
比如发送的 Json 字符串如下所示:
image
但在前端显示时,却出现了精度丢失
image

2.原因

这是因为在JavaScript中,数字类型被限制为双精度浮点数,而Java中的Long类型是64位整数,超过了双精度浮点数的范围。
image

3.解决方法

解决这个问题的方法是在 Jackson 序列化时将 Long 类型转换为字符串类型。可以使用 Jackson 的 @JsonFormat 注解来指定转换规则,例如:

@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long myLongField;

这样,当Jackson序列化该对象时,myLongField字段将被转换为字符串类型,从而避免精度丢失问题。
另外,如果 Java 对象有很多 Long 类型字段,也可以通过配置 Jackson 的 ObjectMapper 来全局设置该规则,例如:

@Configuration
public class JacksonConfig {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer customizer() {
        return builder -> builder.serializerByType(Long.class, new ToStringSerializer());
    }
}

这样配置后,所有 Java 对象中的 Long 类型字段都会被转换为字符串类型。
image

posted @   DaleLee  阅读(1517)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示