biginteger和long精度_修复Long类型太长,而Java序列化JSON丢失精度问题的方法
造成原因:JS内置有32位整数,而number类型的安全整数是53位。如果超过53位,则精度会丢失。正如现在后台传来一个64位的Long型整数,因此超过了53位,所以后台返回的值和前台获取的值会不一样。
Java序列化JSON时long型数值,会出现精度丢失的问题。
原因:
java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值).
解决办法一:
使用ToStringSerializer的注解,让系统序列化
时,保留相关精度
@JsonSerialize(using=ToStringSerializer.class)
private Long createdBy;
FastJson 注解
@JSONField(serializeUsing= ToStringSerializer.class)
上述方法需要在每个对象都配上该注解,此方法过于繁锁。
解决办法(二):
使用全局配置,将转换时实现自动ToStringSerializer序列化
Override
public void configureMessageConverters(List> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
/**
* 序列换成json时,将所有的long变成string
* 因为js中得数字类型不能包含所有的java long值
*/
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
converters.add(jackson2HttpMessageConverter);
项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种。当然,有时候项目中也可能会统一约定使用了fastjson,然而Spring MVC中默认是使用了Jackson的
在Spring Boot中将Jackson替换为fastjson一般会有两种方式:
第一种:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public HttpMessageConverters fastJsonHttpMessageConverter() {
return new HttpMessageConverters(new FastJsonHttpMessageConverter());
}
}
第二种:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List> converters) {
FastJsonHttpMessageConverter fastConverter =
new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
fastConverter.setFastJsonConfig(fastJsonConfig);
converters.add(fastConverter);
}
}
替换成fastjson之后,对于精度丢失问题,我们可以这么去做:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List> converters) {
FastJsonHttpMessageConverter fastConverter =
new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
SerializeConfig serializeConfig = SerializeConfig.globalInstance;
serializeConfig.put(BigInteger.class, ToStringSerializer.instance);
serializeConfig.put(Long.class, ToStringSerializer.instance);
serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
fastJsonConfig.setSerializeConfig(serializeConfig);
fastConverter.setFastJsonConfig(fastJsonConfig);
converters.add(fastConverter);
}
}
biginteger和long精度_修复Long类型太长,而Java序列化JSON丢失精度问题的方法相关推荐
- java json太长_修复Long类型太长,而Java序列化JSON丢失精度问题的方法
Java序列化JSON时long型数值,会出现精度丢失的问题. 原因: java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值). 解决办法一: 使用 ...
- 修复Long类型太长转为JSON格式的时候出错的问题
这边项目要求ID是自动生成的20位Long型数字 但是实际中应用的时候回发生一种问题就是,查询的时候debug的时候数据都正常,但是返回前端的时候就会发现,数据错误了. 大体就是类似于下面的这种情况. ...
- double类型数据做加和操作时会丢失精度问题处理
double类型的数据做加和操作 时会丢失精度,如下操作结果为: int a = 3; double b = 0.03; double c = 0.03; double ...
- 如何反映两条曲线的拟合精度_【隆旅干货分享】差压传感器的应用及精度特性分析...
/// 专 业 的 工 业 传 感 与 测 量 知 乎 号 /// / 前言 / 差压传感器通常被用于试验台.风洞.泄漏检测系统和其他应用中.每种应用的工程师都在寻求对他们所在行业十分重要的传感器改进 ...
- java transient关键字_嗯?你真的会用 Java 序列化机制?
码农每日一题长按关注,工作日每天分享一个技术知识点. 一.序列化.反序列化概念及其使用场景 1.序列化.反序列化的概念 简单的讲,序列化就是将java对象转化成二进制保存到磁盘中去,反序列化就是从磁盘 ...
- ai杀手级_游戏花了太长时间才能利用stadias杀手级功能
ai杀手级 On July 1, Crayta, a game that allows people to collaborate on making other games, exclusively ...
- 排烟管道过长怎么处理_抽油烟机因管道太长排烟困难有何办法解决
抽油烟机的室外排烟管道距离地面多高排烟效果 在2.2米至2.4米排烟效果较好.###高矮只会是否烟气在室外消散的时间! 2020-08-30 欧柏抽油烟机门打不开有什么办法 第一步:旋下油杯,倒去积油 ...
- js long类型精度丢失_后端Long类型传到前端精度丢失的正确解决方式
原因:前端js对Long类型支持的精度不够,导致后端使用的Long传到前端丢失精度,比如现在分布式id生成算法"雪花算法"在使用中就会出现问题. 解决方式: 1.后端的Long类型 ...
- js long类型精度丢失_解决js处理Long类型丢失精度的问题
项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种. 不管使用哪种,Spring MVC返回个前段Long类型的数据时,js在 ...
最新文章
- 使用标准模板find函数来对结构体容器进行查找
- java dateformat 线程安全_SimpleDateFormat线程安全问题深入解析
- 洛谷P1169 棋盘制作(悬线法)
- jsp页面中使用超链接标签a中的属性href和onclick同时触发怎么执行
- ProxySQL 监控和统计
- 一天1个机器学习知识点(三)
- WinAPI: midiOutReset - 重置输出设备
- C语言32个关键字与C++62个关键字详解
- 2021牛客暑期多校训练营5 E-Eert Esiwtib(树形dp+位运算)
- 这道笔试题竟然运行不出错
- 使用 DataAdapter 和 DataSet 更新数据库
- css连续的纯数字或字母强制换行
- 301重定向错误(细心就不应该出错)
- 域渗透——Local Administrator Password Solution
- Exceptions, Catch, and Throw(Chapter 10 of Programming Ruby)
- android 页面icon拉伸_页面转场: 忽略它可能会使你犯错
- 西游记与面向对象编程
- 微信网页授权只能配置一个域名
- JavaScript逻辑运算与或非
- qmh(qtmediahub)插件研究
热门文章
- 立面设计模式–设计观点
- 使用WS-Trust / STS采样器扩展JMeter
- Mockito和Hamcrest的试驾制造商
- 使用JAXB从XSD生成XML
- 背景区域为负样本什么意思_词向量-skipgram与负采样
- bat 存储过程返回值_为什么不推荐使用存储过程?
- solr cloud 更新 solrconfig 配置_Solr各版本新特性「4.x,5.x,6.x,7.x」
- C 常用新特性(下)
- js 转化为实体符_js转html实体的方法
- mysql binlog线程恢复_使用MySQL SQL线程回放Binlog实现恢复