偶然遇到了fastjson在序列化浮点型数据为String类型的时候,出现了科学记数法的格式。
由此开始解决问题。
官方给出的解决办法如下:
方法一:
https://github.com/alibaba/fastjson/wiki/ObjectSerializer_cn
自定义一个序列化对象,替换掉官方默认指定类型的序列化对象。默认的对象类型在SerializeConfig中的initSerializers()方法中初始化;
方法二:
https://github.com/alibaba/fastjson/issues/656
不要使用浮点型的数据,换成Decimal类型;
方法三:
实现ValueFilter接口,这个接口只对key-value格式的数据产生效果。因为只有key-value格式的数据才会被fastjson的MapSerializer序列化对象调用。也就是说只有MapSerializer才会去调用ValueFilter的实现.
public class DoubleToStringFilter implements ValueFilter {
@Override
public Object process(Object object, String name, Object value) {
if(null != value && value instanceof Double) {
BigDecimal b = BigDecimal.valueOf((Double) value);
return b.longValue();
}
return value;
}
}
网友评论