Long类型精度丢失问题解决方案
问题描述:
我们在查询Long类型的id数据时,返回客户端,浏览器会将json格式的字符串转化为js对象使用,Java数值类型数据对应js中的数据类型是number,因为Long类型的数字超过了js的数字处理范围,所以会出现精度丢失的问题。
解决方案:
让Long类型的值返回给客户端的时候,以字符串形式返回即可,这样客户端收到数据之后就会转化为js的字符串对象,就不会出现精度丢失的问题。因为我们使用SpringBoot进行项目开发, 在返回数据的使用SpringBoot会自动使用Jackson将我们返回的数据转化为JSON字符串返回给客户端, 所以只需要通过配置的方式告诉框架对应Long类型的值改如何转化即可。
在通用类common模块中创建jackson配置类,定义jackson序列化配置
点击查看代码
public class JacksonConfig {
@Bean
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
// 将Long类型序列化成String类型 防止Long类型造成前端精度丢失
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
return objectMapper;
}
}
点击查看代码
@Configuration
@Import({SwaggerConfiguration.class, ExceptionCatch.class, JacksonConfig.class})
public class InitConfig {
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了