Json Long 类型精度丢失
1.现象
在 SpringBoot 项目中,使用 Jackson 将Java 对象转为 Json 传给前端,但 Java 对象有 Long 类型字段,传给前端后会出现精度丢失的现象。
比如发送的 Json 字符串如下所示:
但在前端显示时,却出现了精度丢失
2.原因
这是因为在JavaScript中,数字类型被限制为双精度浮点数,而Java中的Long类型是64位整数,超过了双精度浮点数的范围。
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 类型字段都会被转换为字符串类型。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)