阅读背景:

Jackson-Long精度丢失问题

来源:互联网 

文章目录 说明 而我的问题是 处理

说明 由于Javascript中证书的精度最大值是有限的,通过控制台获取最大值Number.MAX_SAFE_INTEGER会发现是9007199254740991,任何大于 9007199254740991 的就可能会丢失精度 而我的问题是 由于我们的ID 是分布式ID 数据类型是Long类型的远远大于了最大值,所以在返给前端的时候,处理掉就好了 处理 通过定制jackson2ObjectMapperBuilderCustomizer解决 /** * 修复ID 精度丢失问题 */ @Configuration public class JacksonConfig { @Bean("jackson2ObjectMapperBuilderCustomizer") public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { Jackson2ObjectMapperBuilderCustomizer customizer = new Jackson2ObjectMapperBuilderCustomizer() { @Override public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) { jacksonObjectMapperBuilder.serializerByType(Long.class,new CustomLongSerialize()); jacksonObjectMapperBuilder.serializerByType(Long.TYPE, new CustomLongSerialize()); } }; return customizer; } } 自定义Long序列化 public class CustomLongSerialize extends JsonSerializer<Long> { /** * Method that can be called to ask implementation to serialize * values of type this serializer handles. * * @param value Value to serialize; can <b>not</b> be null. * @param gen Generator used to output resulting Json content * @param serializers Provider that can be used to get serializers for */ @Override public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException { if (value != null && value.toString().length() > 16) { gen.writeString(value.toString()); } else { gen.writeNumber(value); } } } 说明 由于Javascript中证书的精度最大值是有限的,通



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: