SpringMVC消息转换器

SpringMVC自定义消息转换器

1. 目的

本篇主要是解决Long类型数据长度大于17位在传输到前段JS中精度丢失问题

2. 原因分析

2.1 数据库

通过下图可以看到数据库中姓名为:test用户的id为 : 1480420270175735809

image-20220112123628997
2.2 控制台

通过控制台查看页面传递过来员工的id值和数据库中的id值不一致: 1480420270175735800

image-20220112123848356
2.3 为什么?
  • 通过上面的观察,可以看到在服务器端,通过java对象转为JSON为序列化操作,员工ID是一个Long类型的长整形数据,而且是一个长度为19为的长整型数据,该数据返回前段是没有问题的。
  • 问题出现在了前段JS中,JS在对较长的长整型数据处理的时候会出现精度丢失问题。从而导致数据的ID和提交的id不一致。

3. 解决方案

让long类型的数据,不直接转换为数字类型,而是转换为字符串类型,就可以解决该问题。由于在SpringMVC中,java对象转JSON对象是通Jackson实现的,涉及到SpringMVC中的消息转换器MappingJackson2HttpMessageConverter,所以要解决该问题,需要对消息转换器功能进行拓展。

3.1 对象转换器
  • 自定义的对象转换器,主要指定了,进行JSON数据序列化及反序列化时,LocalDateTime,LocalDate,LocalTime的处理方式,以及BigInteger及Long类型数据,直接转换为字符串。

在这里插入图片描述

3.2 在WebMvcConfig中重写方法

在这里插入图片描述

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值