数字类型ID过长导致前后端数据不一致?

太白
2022-05-10 / 0 评论 / 0 点赞 / 1,033 阅读 / 799 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-22,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前后端项目中可能会遇到“前端→后台",”后台→前端“传输过长的数字ID时,精度丢失的问题


比如id超过17位后,f12接口调试在preview里查看是从18位起都是0,但从response里看,返回的是正确的id。

原因分析:

JS 中能精准表示的最大整数是 Math.pow(2, 53),十进制即 9007199254740992

解决方案

  • 方案一:
    缩减id长度(短存一定风险)。
  • 方案二:
    将id转成字符串进行传递(下面是基于FastJson)
    @Configuration
    public class SessionConfig implements WebMvcConfigurer{
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter();
            FastJsonConfig fjc = new FastJsonConfig();
            SerializeConfig serializeConfig = SerializeConfig.globalInstance;
            serializeConfig.put(Long.class , ToStringSerializer.instance);
            serializeConfig.put(Long.TYPE , ToStringSerializer.instance);
            fjc.setSerializeConfig(serializeConfig);
            fastJsonConverter.setFastJsonConfig(fjc);
            converters.add(fastJsonConverter);
        }
    }
    
0

评论区