SpringMVC自定义消息转换器
1. 目的
本篇主要是解决Long类型数据长度大于17位在传输到前段JS中精度丢失问题
2. 原因分析
2.1 数据库
通过下图可以看到数据库中姓名为:test用户的id为 : 1480420270175735809
2.2 控制台
通过控制台查看页面传递过来员工的id值和数据库中的id值不一致: 1480420270175735800
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类型数据,直接转换为字符串。