转自:
SpringBoot Jackson序列化JS精度丢失的解决方法分享
下文笔者讲述SpringBoot中JS精度丢失的解决方法分享,如下所示
问题出现的原因
例:
数据库中使用bigint
Java中使用Long
前端则出现JS精度丢失
方式1:属性序列化注解@JsonSerialize
将对象中的指定属性以文本的方式进行序列化 配置@JsonSerialize的id和age被转换成了文本
@Data class User{ @JsonSerialize(using = ToStringSerializer.class) Long id; String name; @JsonSerialize(using = ToStringSerializer.class) Integer age; Short gender; }
方式2:全局配置,将数值类型转换为文本
application.yml 中添加相应设置 spring: jackson: generator: write_numbers_as_strings: true #序列化的时候,将数值类型全部转换成字符串返回
方式3:单类型转换
自定义一个Jackson对象转换构造器 将指定类型以指定的序列化方式进行转换 如 碰见Long、Double类型 才转换为文本
例
@Bean("jackson2ObjectMapperBuilderCustomizer") public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { Jackson2ObjectMapperBuilderCustomizer customizer = new Jackson2ObjectMapperBuilderCustomizer() { @Override public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) { jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance) .serializerByType(Long.TYPE, ToStringSerializer.instance); } }; return customizer; }