浏览器响应数据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类型数据传入前端损失精度的主要内容,如果未能解决你的问题,请参考以下文章

浏览器接收Long型数据精度丢失问题的解决方案

浏览器接收Long型数据精度丢失问题的解决方案

怎么将long类型转换为string类型

Java自动类型转换规则

Layui 数据表格 回显数值过大的字段(Long型数据)导致精度丢失问题

Layui 数据表格 回显数值过大的字段(Long型数据)导致精度丢失问题