@Bean
@ConditionalOnMissingBean({FastJsonHttpMessageConverter.class})
public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
FastJsonHttpMessageConverter converter = new CustomFastJsonHttpMessageConverter();
List<MediaType> mediaTypes = new ArrayList<>(4);
mediaTypes.add(MediaType.parseMediaType("application/json;charset=UTF-8"));
mediaTypes.add(MediaType.parseMediaType("application/x-www-form-urlencoded"));
mediaTypes.add(MediaType.parseMediaType("text/html;charset=UTF-8"));
mediaTypes.add(MediaType.parseMediaType("text/plain;charset=UTF-8"));
converter.setSupportedMediaTypes(mediaTypes);
FastJsonConfig fastJsonConfig = new FastJsonConfig();
// SerializerFeature.DisableCircularReferenceDetect 取消对象直接引用
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.DisableCircularReferenceDetect);
// 解决Long转json精度丢失的问题
SerializeConfig serializeConfig = SerializeConfig.globalInstance;
serializeConfig.put(BigInteger.class, ToStringSerializer.instance);
serializeConfig.put(Long.class, ToStringSerializer.instance);
serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
serializeConfig.put(LocalDateTime.class, new ObjectSerializer() {
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features)
throws IOException {
SerializeWriter out = serializer.out;
if (object == null) {
out.writeNull();
return;
}
out.writeLong(((LocalDateTime) object).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
}
});
fastJsonConfig.setSerializeConfig(serializeConfig);
converter.setFastJsonConfig(fastJsonConfig);
return converter;
}
记SpringBoot项目Long类型转Json精度丢失问题
于 2024-05-30 14:54:37 首次发布