mybatis-plus雪花算法自动生成ID到前端后精度丢失问题

问题发生

前端接收到后端的数据出现异常,异常如下:

如图这是后端正常返回的数据,

image-20231210233224808

但是点击预览时发现这个id的数据被改变了

image-20231210233153716

这就导致了我通过id去修改相关数据时无法成功

问题原因

id的长度过长(19位),前端js的Number类型精度为16位,所以导致数据格式化精度丢失

这个id是我用mybatis-plus的雪花算法自动生成的,后端实体类似如下:

image-20231210233724815

后端实体参数使用Long类型是没有任何问题的,关键就在于Long类型到前端后在解析json时候会被解析为Number类型导致精度缺失。

问题解决

方案一

修改后端全部实体的id为String类型,并且修改数据库类型

方案二

优化后端返回给前端数据时候的JSON序列化,将Long类型转变为String响应给前端

**注:**在springBoot应用中默认使用Jackson进行JSON序列化响应数据给前端

package com.newblog.security.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

/**
 * <p>
 *
 * </p>
 *
 * @author:雷子杰
 * @date:2023/12/10
 */
@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;
    }

}

参考文档

相关推荐

  1. 前端计算精度丢失问题

    2023-12-16 04:38:03       37 阅读
  2. 雪花算法生成分布式主键ID

    2023-12-16 04:38:03       23 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 04:38:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 04:38:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 04:38:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 04:38:03       18 阅读

热门阅读

  1. react内置组件之<StrictMode></StrictMode>

    2023-12-16 04:38:03       31 阅读
  2. 通过Ai帮我们写前端界面设计

    2023-12-16 04:38:03       40 阅读
  3. Llinux面试题2

    2023-12-16 04:38:03       32 阅读
  4. 超全面网络安全学习知识——(黑客)自学

    2023-12-16 04:38:03       41 阅读
  5. Mybatis配置-类型别名(typeAliases)

    2023-12-16 04:38:03       36 阅读