欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浏览器响应数据long型超长自动转换精度丢失-JavaScript 整数精度丢失问题-springboot解决Long类型数据传入前端损失精度

程序员文章站 2022-07-15 13:00:03
...

最近在洗敏感数据id,用类似snowflake算法加入分表基因生成新的ID,返回给前端,前端整数显示不正常。

java中long的最大值:9223372036854775807

看看在浏览器中的显示:

Google Chrome

版本 79.0.3945.117(正式版本) (64 位)

 

浏览器响应数据long型超长自动转换精度丢失-JavaScript 整数精度丢失问题-springboot解决Long类型数据传入前端损失精度

后面好几位不一样了,看看JavaScript中整数的最大值:

浏览器响应数据long型超长自动转换精度丢失-JavaScript 整数精度丢失问题-springboot解决Long类型数据传入前端损失精度

看来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)