zoukankan      html  css  js  c++  java
  • 雪花算法传到前端精度丢失问题

    问题:

      数据库中id是1465396696468033540 结果传到前端变成1465396696468033500,后面几位精度缺失了

    原因:

      Number精度是16位(雪花ID是19位的),so:JS的Number数据类型导致的精度丢失

    解决办法

    1. 直接使用注解把Long类型序列化(与方法2本质是一样的)
      1. /**
        * 防止精度丢失
        */
        @JsonSerialize(using = ToStringSerializer.class)
        private Long id;
    2. 前端用String类型的雪花ID保持精度,后端及数据库继续使用Long(BigINT)类型不影响数据库查询执行效率。在Spring Boot应用中,使用Jackson进行JSON序列化的时候怎么将Long类型ID转成String响应给前端?
      1. @Configuration
        public class JacksonConfig {
        
          @Bean
          @Primary
          @ConditionalOnMissingBean(ObjectMapper.class)
          public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
          {
            ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        
            // 全局配置序列化返回 JSON 处理
            SimpleModule simpleModule = new SimpleModule();
            //JSON Long ==> String
            simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
            objectMapper.registerModule(simpleModule);
            return objectMapper;
          }
        
        }
    3. 笨方法:把所有的数据库表设计,id字段由Long类型改成String类型 

    原文入口:https://www.cnblogs.com/zimug/archive/2020/08/25/13557662.html

       

    一个小小后端的爬行痕迹
  • 相关阅读:
    Hive的安装和使用
    Redis 慢查询日志
    GO语言-数组
    ZooKeeper-3.3.4集群安装配置
    GO语言-基础语法:循环
    GO语言-基础语法:条件判断
    GO语言-基础语法:变量定义
    nginx限制下载速度
    Centos7下Etcd集群搭建
    浅谈spj
  • 原文地址:https://www.cnblogs.com/heikedeblack/p/14333812.html
Copyright © 2011-2022 走看看