Spring Boot 处理 Long 精度丢失问题
问题
数据库中有一个 bigint 类型的字段,对应 Java 后台类型为 Long。接口返回给前端后,页面上显示的数据和数据库中的不一致——后面几位全变成了 0。
原因是前端 JavaScript 的 Number 类型只有 53 位安全整数,超过 2^53 的长整型数值无法精确表示,导致精度丢失。
解决方式一:全局配置数字转字符串输出
Jackson 有一个配置参数 WRITE_NUMBERS_AS_STRINGS,可以强制将所有数字转成字符串输出:
1spring:
2 jackson:
3 generator:
4 write_numbers_as_strings: true
解决方式二:字段级注解
只对需要的字段生效,使用 @JsonSerialize 注解:
1@JsonSerialize(using = ToStringSerializer.class)
2private Long bankcard;
