问题发生
前端接收到后端的数据出现异常,异常如下:
如图这是后端正常返回的数据,
但是点击预览时发现这个id的数据被改变了
这就导致了我通过id去修改相关数据时无法成功
问题原因
id的长度过长(19位),前端js的Number类型精度为16位,所以导致数据格式化精度丢失
这个id是我用mybatis-plus的雪花算法自动生成的,后端实体类似如下:
后端实体参数使用Long类型是没有任何问题的,关键就在于Long类型到前端后在解析json时候会被解析为Number类型导致精度缺失。
问题解决
方案一
修改后端全部实体的id为String类型,并且修改数据库类型
方案二
优化后端返回给前端数据时候的JSON序列化,将Long类型转变为String响应给前端
注:在springBoot应用中默认使用Jackson进行JSON序列化响应数据给前端
packagecom.newblog.security.config;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.databind.module.SimpleModule;importcom.fasterxml.jackson.databind.ser.std.ToStringSerializer;importorg.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importorg.springframework.http.converter.json.Jackson2ObjectMapperBuilder;/**
* <p>
*
* </p>
*
* @author:雷子杰
* @date:2023/12/10
*/@ConfigurationpublicclassJacksonConfig{@Bean@Primary@ConditionalOnMissingBean(ObjectMapper.class)publicObjectMapperjacksonObjectMapper(Jackson2ObjectMapperBuilder builder){ObjectMapper objectMapper = builder.createXmlMapper(false).build();// 全局配置序列化返回 JSON 处理SimpleModule simpleModule =newSimpleModule();//JSON Long ==> String
simpleModule.addSerializer(Long.class,ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);return objectMapper;}}
参考文档
版权归原作者 爱学习的大雄 所有, 如有侵权,请联系我们删除。