相信这个问题我可能不是第一个提,JSON中所有带小数位的字段,反序列化后都会变成BigDecimal,我觉得这是一种偷懒的做法,反序列化为BigDecimal当然不会错,因为它有最大的精度,但这样我们的程序就丢失了原来JSON应有的属性,比如如果将这个反序列化后的JSON存入MongoDB,它就会报错,因为它根本不支持BigDecimal直接存入数据库,就没有办法将JSON进行序列化时,保留原来栏位的类型信息,在反序列化时一一还原回来吗?不管是日期,浮点还是其他?
写了一个关闭这个特性的方法:
https://github.com/alibaba/fastjson/wiki/deserialize_disable_bigdecimal_cn
看是否满足你的需求
demo中写的局部生效
int disableDecimalFeature = JSON.DEFAULT_PARSER_FEATURE &= ~Feature.UseBigDecimal.getMask();
依然会全局生效,我觉得应该是
int disableDecimalFeature = JSON.DEFAULT_PARSER_FEATURE & ~Feature.UseBigDecimal.getMask();
很蛋疼啊。然后反序列化后再转成 double 就报错
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Double
@wenshao parseArray 这些方法不支持传参,是不是只能采用全局生效了
在使用parseArray的时候依然有这个问题,而且没有地方添加Feature,目前无法解决。
Most helpful comment
写了一个关闭这个特性的方法:
https://github.com/alibaba/fastjson/wiki/deserialize_disable_bigdecimal_cn
看是否满足你的需求