栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

关于雪花算法的一些坑

Java 更新时间:发布时间: 百科书网 趣学号

众所周知,JAVA中要使用雪花算法生成id,必须将实体类的字段设置为Long类型,对应mysql数据库中的bigint类型。

实体类

数据库

雪花算法的优点有很多,比如跟UUID相比,它是Long类型的,而UUID是字符串类型的,在数据库中明显雪花算法的更美观,UUID更杂乱,并且查询的时候字符串的效率会略低一点

UUID的数据库表

雪花算法的数据库表

重点来了!!!

我在做项目的时候发现,明明在后端从数据库拿到用雪花算法生成的id明明是正确的,但是数据打到前端的时候就全变了,特点是每个id的值全被进位了,为此我专门测试了一下

js代码

控制台输出

再次测试,直接控制台输出


结论是JAVA生成的Long类型数字在JS中被进位了

解决方法

全局配置序列化返回 JSON 处理,将所有向前端输出的Long类型数据转为String类型数据

@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;
    }
}

问题解决,亲测有效

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/956830.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号