JSON字符串如下:
{ "salaryStart": { "$numberDecimal": "6000" }, "salaryEnd": { "$numberDecimal": "9000" } }
由于MongoDB不支持BigDecimal类型, 需转换成Decimal128存储。
spring 定义转换器
@ReadingConverter @WritingConverter public class BigDecimalToDecimal128Converter implements Converter<Decimal128, BigDecimal> { @Override public BigDecimal convert(Decimal128 decimal128) { return decimal128.bigDecimalValue(); } }
对象字段
public class PositionDO{ //综合薪资范围起 private BigDecimal salaryStart; //综合薪资范围止 private BigDecimal salaryEnd; }
所以支持mongodb类型和java类型互转。
现在用原对象接收,抛异常 Exception in thread "Thread-8" com.alibaba.fastjson2.JSONException: TODO : 6
_问:如何用BigDecimal 接收这样的类型字段,怎样将converter使用进去?
原提问者GitHub用户lmh2017
BigDecimal 和 Decimal128 都是用于表示高精度小数的数据类型,但它们属于不同的数据类型,因此在进行转换时需要注意一些细节。
在 Java 中,可以通过 BigDecimal 的 toPlainString() 方法将 BigDecimal 转换为字符串,然后再通过 new Decimal128(str) 将字符串转换为 Decimal128。示例代码如下:
BigDecimal bigDecimal = new BigDecimal("1234.5678"); String str = bigDecimal.toPlainString(); Decimal128 decimal128 = new Decimal128(str); 在 MongoDB 的官方驱动中,可以通过 Decimal128 的 bigDecimalValue() 方法将 Decimal128 转换为 BigDecimal。示例代码如下:
Decimal128 decimal128 = new Decimal128("1234.5678"); BigDecimal bigDecimal = decimal128.bigDecimalValue(); 需要注意的是,BigDecimal 和 Decimal128 的精度范围和舍入规则可能存在差异,因此在进行转换时需要注意数据精度是否会发生变化。
问题已经修复,请用新版本 https://github.com/alibaba/fastjson2/releases/tag/2.0.7
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。