fastjson toJSONString SerializerFeature.WriteClassName Bug

uidvcgyl  于 2021-11-27  发布在  Java
关注(0)|答案(6)|浏览(746)

version : 1.2.67
复现代码如下:

JSON.toJSONString(new BigDecimal("1"), SerializerFeature.WriteClassName)

输出:

1.

期望输出:

1zmg4dgp

1zmg4dgp1#

换成最新版本依然如此,希望可以尽快解决

mmvthczy

mmvthczy2#

com.alibaba.fastjson.serializer.BigDecimalCodec

if (out.isEnabled(SerializerFeature.WriteClassName) && fieldType != BigDecimal.class && val.scale() == 0) {
         out.write('.');
     }

这里这么做的目的是什么?目前这种方式生成的json存入mysql时存在错误,number后面有个.

uyhoqukh

uyhoqukh3#

确实存在这个问题,同问

5sxhfpxr

5sxhfpxr4#

我这边已经使用jackson来实现与这个相同的场景了,如果你业务上着急使用,可以使用以下代码代替fastjson的SerializerFeature.WriteClassName功能

ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, DefaultTyping.EVERYTHING, JsonTypeInfo.As.WRAPPER_OBJECT);
olqngx59

olqngx595#

@dingqianwen 我使用JSON.toJSONString(new BigDecimal("1")) 正常序列化了。

6fe3ivhb

6fe3ivhb6#

我的需求是需要加上SerializerFeature.WriteClassName来写入类名称,但是加上SerializerFeature.WriteClassName就会引起Bug

相关问题