浏览器响应数据long型超长自动转换精度丢失-JavaScript 整数精度丢失问题-springboot解决Long类型数据传入前端损失精度
Posted Dreamer who
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浏览器响应数据long型超长自动转换精度丢失-JavaScript 整数精度丢失问题-springboot解决Long类型数据传入前端损失精度相关的知识,希望对你有一定的参考价值。
最近在洗敏感数据id,用类似snowflake算法加入分表基因生成新的ID,返回给前端,前端整数显示不正常。
java中long的最大值:9223372036854775807
看看在浏览器中的显示:
Google Chrome
版本 79.0.3945.117(正式版本) (64 位)
后面好几位不一样了,看看javascript中整数的最大值:
看来JavaScript的整数要比java的小。
如何解决:
前端可以做,后端序列化生字符串就行;
比如spring boot应用统一解决:
/**
* @author sdcuike
* @DATE 2020/1/17
*/
@Configuration
public class Jackson2Customizer
public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer()
return jacksonObjectMapperBuilder ->
//修复:前端js 精度问题
jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
jacksonObjectMapperBuilder.serializerByType(Long.TYPE, ToStringSerializer.instance);
jacksonObjectMapperBuilder.simpleDateFormat(DATE_TIME_FORMAT);
;
或者使用注解在属性上加:
@JsonSerialize(using = ToStringSerializer.class)
以上是关于浏览器响应数据long型超长自动转换精度丢失-JavaScript 整数精度丢失问题-springboot解决Long类型数据传入前端损失精度的主要内容,如果未能解决你的问题,请参考以下文章