springBoot mybatis-plus雪花算法 前端js精度无法识别

2023-11-04

mybatis-plus雪花算法生成id,如何解决前端js精度不够的问题

现在雪花算法是比较主流的,在码神之路这个项目当中,id用到的就是雪花算法,我们的文章详情页面,就无法获取真正的文章id,是因为前端js的精度不够导致的。第一次遇到这样的问题,因为后端用的是路径参数,当然我们也会很只管的看到,id与数据库对比,确实不同,但就是不同,后来经过了解,当遇到这种问题时,我们只需要添加扩展消息转换器就可以了。

配置扩展消息转换器两个步骤:
首先定义自己的消息转换器的类:

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
/**
 * 消息转换器
 * WangMangFish
 * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
 * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
 */
public class JacksonObjectMapper extends ObjectMapper {
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
    public JacksonObjectMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
                .addSerializer(BigInteger.class, ToStringSerializer.instance)
                // 将long型数据转换为字符串,防止雪花算法ID精度缺少
                .addSerializer(Long.class, ToStringSerializer.instance)
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}

然后加入到webMVC的配置中:

public class WebAboutConfig implements WebMvcConfigurer {
		@Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        // 设置对象转换器,使用Jackson将java对象转换为json
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        // 将消息转换器对象追加到mvc框架的转换器集合中
        converters.add(0,messageConverter);
    }
}

欧克,至此我们就完成了消息转换器的功能了。快去项目里试一下吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springBoot mybatis-plus雪花算法 前端js精度无法识别 的相关文章

随机推荐

  • SQLite 基础

    SQLite 为什么使用SQLite SQLite 命令 SQLite 安装 SQLite 命令 SQLite 语法 SQLite 语句 SQLite 数据类型 SQLite 特殊运算符 SQLite SQL 高级用法 SQLite PRA
  • UPF_iso cell 替换

    目标 使用stdand cell替换isolation cell 在低功耗SOC中 难免会有signal从掉电阈传输到未掉电阈 两个阈的电压相同 这个时候就需要用ISO cell做隔离 但在一些大工艺的cell中 是没有这种cell的 在这
  • ReactNative中js与原生如何交互

    第一部分 在ReactNative中 原生与js交互常用的是原生通过向js发送事件 参考webview源代码 1 定义事件与发送消息方法 public class ReactExpandListViewEvent extends Event
  • flash player_Flash Player的两种开源替代品

    flash player 2017年7月 Adobe敲响了其Flash Media Player的丧钟 宣布它将在2020年终止对曾经无处不在的在线视频播放器的支持 但是 实际上 Flash在过去八年中一直处于下滑状态破坏其声誉的零时差攻击
  • Docker----Docker容器的启动流程

    详细内容见 DevOps技术社区文章 Docker Docker容器的启动流程
  • new Option("文本","值",true,true).后面两个true分别表示默认被选中和有效!

    var url city cityList json post url parentCityCode code function data var jsonObj JSON parse data areaId append
  • 线程优先级设置

    线程测试需要root用户 不然创建不成功 所以要用sudo su命令 Linux内核的三种调度策略 1 SCHED OTHER 分时调度策略 2 SCHED FIFO 实时调度策略 先到先服务 一旦占用cpu则一直运行 一直运行直到有更高优
  • ad导入candence 更改pin引脚长度

    前言 很多时候我们使用的封装 可能是不完整的 引脚长度也不一样 原理图连接的时候就发现连接不上线 明显没对齐grid 1 右键edit pin 更改第一个引脚为short 然后下拉那个小点完成对目标覆盖 2 确认之后 再重新选择为line
  • 力扣刷题-56 - I. 数组中数字出现的次数、位运算的应用

    一个整型数组 nums 里除两个数字之外 其他数字都出现了两次 请写程序找出这两个只出现一次的数字 要求时间复杂度是O n 空间复杂度是O 1 c 位运算 位运算 计算机中是用二进制存储数据 一个字节包含8个位 每个 1 或者 0 就是一位
  • Android下拉刷新

    app开发中下拉刷新是最常接触到的一个功能 也有很多开源的框架 封装的非常棒 前段时间了解了一下ViewDragHelper 遂用它实现了下拉刷新的功能 大概和我之前的ViewDragHelper之拖动加载 类似淘宝 这篇代码类似 只是做了
  • LeetCode算法题 - 数组异或操作(简单)

    题目 func xorOperation n int start int int xor 0 for i 0 i lt n i xor start 2 i return xor
  • Python学习16:函数的作用

    1 函数是组织好的 可重复使用的 用来实现单一 或相关联功能的代码段 2 函数能提高应用的模块性 和代码的重复利用率 你已经知道Python提供了许多内建函数 比如print 但你也可以自己创建函数 这被叫做用户自定义函数 3 函数的作用
  • java有序链表和无序链表合并_用顺序表或链表实现 将两个无序数列合并为一个有序数列 用c语言。。急急急。。谢谢了。。。...

    满意答案 lklmn 2014 03 03 采纳率 51 等级 9 已帮助 115人 include
  • [JavaScript] 常用的键盘事件

    文章目录 常用的键盘事件 键盘事件对象 示例练习 模拟京东按键输入内容 常用的键盘事件 事件除了使用鼠标触发 还可以使用键盘触发 我们主要学习以下三个键盘事件 这里举一下onkeyup的示例 当我们按键弹起的时候事件触发 document
  • uniapp轮播图(本地资源图片)

    一 代码示例
  • Window 安装Sqoop 环境

    第一步 下载Sqoop 官网下载地址 http mirror bit edu cn apache sqoop 第二步 将下载Sqoop tar gz 解压至指定目录 C sqoop 第三步 添加SQOOP HOME 环境变量和Path 全局
  • 2021——使用hexo+github搭建个人博客

    文章目录 一 必备软件安装 二 hexo本地搭建博客 2 1 本地生成博客内容 2 2 文章写作 自动摘录 2 3 博客发布到网上 2 3 1 配置主题模板 2 3 2 配置自己的远程仓库地址 2 3 3 发布github博客 2 4 主题
  • 期货市场对股市有什么影响?

    期货市场对股市有什么影响 因此 投资者可以根据期货标的物的走势 来调整其在股票市场上相关股票的投资策略 即在期货标的物大跌的时候 投资者应卖出股票市场上相关概念的股票 反之 在期货标的物大涨的时候 可以适量的购买相关概念的股票 期货市场上的
  • Java 结合AQS实现不可重入锁

    class MyLock implements Lock private MySync sync new MySync private class MySync extends AbstractQueuedSynchronizer Over
  • springBoot mybatis-plus雪花算法 前端js精度无法识别

    mybatis plus雪花算法生成id 如何解决前端js精度不够的问题 现在雪花算法是比较主流的 在码神之路这个项目当中 id用到的就是雪花算法 我们的文章详情页面 就无法获取真正的文章id 是因为前端js的精度不够导致的 第一次遇到这样