我现在在转换为json字符串与转出出现了BigDecimal属性变为BigInteger属性的问题。
背景:我做了一个对象比较的功能,旧对象与新对象为同一个类,转换为json字符串通过消息队列发送到对象比对服务,消息比对转换成JsonObject,再进行拆分变成基础对象进行比较,现在同一字段都是BigDecimal,一个前端输入,一个数据库中查询出来的数据,精度不同,数据库中查询的数据在消息服务能正常获取到类为BigDecimal,但前端传入的转为了BigInteger,想请教一下怎么不丢失类型,有尝试过SerializerFeature.WriteClassName,但消息服务中不存在父类导致转成JsonObject报错
原提问者GitHub用户littlestar2125
你可以自定义一个ObjectWriter实现,就是单独一个ObjectWriterProvider,不影响全局。比如:
static final ObjectWriterProvider provider = new ObjectWriterProvider();
@BeforeEach
void setup() {
provider.register(BigDecimal.class, new ObjectWriter<BigDecimal>() {
@Override
public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) {
BigDecimal decimal = (BigDecimal) object;
if (decimal.scale() == 0) {
decimal = decimal.setScale(1);
}
jsonWriter.writeDecimal(decimal);
}
});
}
@Test
public void test() throws Exception {
BigDecimal decimal = BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.ONE);
JSONWriter.Context context = JSONFactory.createWriteContext(provider);
String str = JSON.toJSONString(decimal, context);
assertEquals("9223372036854775808.0", str);
BigDecimal decimal1 = (BigDecimal) JSON.parse(str);
assertEquals(decimal, decimal1.stripTrailingZeros());
}
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。