大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~

希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!!

加油吧!未来可期!!!

本文介绍的是解决 js 对 long 型数据处理丢失精度问题

js丢失精度对页面传输数据的影响是很大的。js对long型数据只能传输16位的数据,对16位以后的数据会进行四舍五入,因此造成丢失数据

问题复现:

解决:

将long型数据转换成为String类型

可如果利用json传输数据,我们可以使用对象映射器

对象映射器解决页面丢失精度问题:

/**

* 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象

* 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]

* 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]

*/

对象映射器代码:

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;/*** 对象映射器:基于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).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);}
}

//序列化器 对long型数据转化成String类型

.addSerializer(Long.class, ToStringSerializer.instance)

//序列化器 对Date型数据转化成String类型

.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))

扩展SpringMVC转换器(设置对象转换器,底层使用Jackson将Java对象转为json)

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 lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {/*** 设置静态资源映射* @param registry*/@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {log.info("开始进行静态资源映射...");registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");}/*** 扩展mvc框架的消息转换器* @param converters*/@Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("扩展消息转换器...");//创建消息转换器对象MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();//设置对象转换器,底层使用Jackson将Java对象转为jsonmessageConverter.setObjectMapper(new JacksonObjectMapper());//将上面的消息转换器对象追加到mvc框架的转换器List集合中// converters.add(0,messageConverter); 0:设置为优先级最高的转换器converters.add(0,messageConverter);}
}

解决 js 对 long 型数据处理丢失精度问题~ 对象映射器和扩展SpringMVC转换器相关推荐

  1. js long类型精度丢失_解决js处理Long类型丢失精度的问题

    项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种. 不管使用哪种,Spring MVC返回个前段Long类型的数据时,js在 ...

  2. 解决页面js接受Long型损失精度问题

    目录 一.场景描述 二.问题分析 三.解决方法 一.场景描述 在下面这个后台管理中,当我们点击禁用后,会向服务器发送一个请求,同时携带这个员工的19位数字的id.  请求方式为PUT 这里的禁用对应e ...

  3. 解决js接收mysql雪花算法数据精度丢失问题

    问题截图 : 问题产生的原因: js只保存16位long数据类型,默认将后三位进行四舍五入处理,将该数据返回给后端执行数据库crud影响行数为0: 解决方案: 将long类型转换成string类型防止 ...

  4. 关于前后端雪花算法Long转String丢失精度问题

    雪花算法精度丢失问题了解: 如图:数据库中 风清扬 对应的ID为 1420038345634918401 观察控制台输出的SQL发现页面传递过来的员工id的值和数据库中的id值不一致,这是怎么回事呢? ...

  5. 前端js长整型精度丢失处理

    一.现象 在分页查询时,服务端会将返回的对象进行json序列化,转换为json格式的数据,而用户的ID是一个Long类型的数据,而且是一个长度为 19 位的长整型数据, 该数据返回给前端是没有问题的. ...

  6. js浮点数精度丢失问题及如何解决js中浮点数计算不精准

    js浮点数精度丢失问题及如何解决js中浮点数计算不精准 参考文章: (1)js浮点数精度丢失问题及如何解决js中浮点数计算不精准 (2)https://www.cnblogs.com/ranyonsu ...

  7. 前端参数无法转为后端实体内部类_Spring Boot返回前端Long型丢失精度

    最近为Prong开发了一个基于snowflake算法的Java分布式ID组件,将实体主键从原来的String类型的UUID修改成了Long型的分布式ID.修改后发现前端显示的ID和数据库中的ID不一致 ...

  8. Spring Boot返回前端Long型丢失精度

    最近为Prong开发了一个基于snowflake算法的Java分布式ID组件,将实体主键从原来的String类型的UUID修改成了Long型的分布式ID.修改后发现前端显示的ID和数据库中的ID不一致 ...

  9. js long类型精度丢失_浮点数丢失精度

    问题 浮点数在运算过程中常常会丢失精度,这是由于二进制数的存储特点造成的,在php或者js中进行浮点数运算或者类型转换的时候常常会丢失精度.而在电商公司,对金额比较敏感,是万万不能接受丝毫的误差的. ...

最新文章

  1. ubuntu16创建开机启动服务
  2. 单片机如何实现大数据的串口传输_获客成本日益增加,企业如何实现大数据精准获客?...
  3. 开发实践 | Android开发Zegbee 温度、气体采集系统(代码类)
  4. java gridlayout 设置列宽_java 利用GridBagLayout布局时,如何设置单列列宽?
  5. adb不识别设备(手机)的若干情形及解决方法
  6. Javascript访问Cookie的四个常用方法
  7. linux基础命令---bzip2
  8. 看完这一篇,运维误删后再也不用跑路了
  9. Java编程:排序算法——归并排序
  10. Python-模块导入-63
  11. android imagebutton 点击效果缩小,imagebutton 设置点击和按压效果
  12. “Win10系统更新后,插上主机耳机孔,没有声音 / 扬声器未插入”解决方法
  13. 地震数据爬取——Scrapy爬虫框架应用
  14. win10企业版LTSC转换成win10专业版LTSC
  15. Gmail大改版,36岁的电子邮箱为何未像BBS一样消亡?
  16. 深度神经网络为什么有效,神经网络处理什么问题
  17. 微信小程序与后端Java接口交互-图书搜索实现
  18. 实验一 词法分析程序设计与实现 (Java实现)
  19. rosetta stone fatal application error: #1141错误 (罗塞塔石碑1141) 解决方法
  20. 非阻塞IO 和阻塞IO

热门文章

  1. python将照片转换为素描图片
  2. mysql 监控 sql执行语句
  3. 关于馒头血案引发的法律相关的思考
  4. python定义数组变量_python中数组用法
  5. 通过Jmeter找到系统最大并发数
  6. {软件设计师之路}程序员道路的经验之谈
  7. flutter:一个完整的登陆页
  8. CS224n 词的向量表示word2vec 之skipgram (softmax)
  9. PCB元器件封装介绍
  10. ES常用DSL的查询和简单统计