fastjson2
fastjson2 copied to clipboard
[QUESTION]实现ObjectWriter接口配合@JSONField(serializeUsing = xxx.class)未生效
请描述您的问题
询问有关本项目的使用和其他方面的相关问题。 [依赖]
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.43</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension</artifactId>
<version>2.0.43</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.43</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.43</version>
</dependency>
[配置] fastJsonConfig.setWriterFeatures( //输出list 为 [] JSONWriter.Feature.WriteNullListAsEmpty, //json格式化 JSONWriter.Feature.PrettyFormat, //输出map中value为null的数据 JSONWriter.Feature.WriteMapNullValue, //输出boolean 为 false JSONWriter.Feature.WriteNullBooleanAsFalse, //输出list 为 [] JSONWriter.Feature.WriteNullListAsEmpty, //输出number 为 0 JSONWriter.Feature.WriteNullNumberAsZero, //输出字符串 为 "" JSONWriter.Feature.WriteNullStringAsEmpty, //对map进行排序 JSONWriter.Feature.MapSortField); [自定义序列化] @Override public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) { System.out.println("自定义序列化规则======================="); Optional .ofNullable(object). filter(Integer.class::isInstance) .map(Integer.class::cast) .ifPresent(jsonWriter::writeInt32); } [问题] 项目中的全局配置Integer类型默认值为0,但是我的业务中对于特定的类需要的默认值为null,想通过实现ObjectWriter接口配合@JSONField(serializeUsing = xxx.class)达到目的却未能实现,是我使用的不对吗?
上图符合你的目的吗?
很感谢您的帮助,对不起,我没能很好地讲清楚我的需求! 我的业务中关于金额(假设字段为Integer),0和null都是有意义的,没有设置Integer的值那么它将为null,设置了0就是0,当从数据库查询一条数据是如果integer没有值则为null(也是期望的序列化的默认值);
//例子A:
Bean beanA =new Bean();
beanA.setInteage(0);
//sout:
{"integer":0}
//例子B:
Bean beanA =new Bean();
beanA.setInteage(null);
//sout:
{"integer":null}
用一句话来总结就是我只想某个类的序列化效果是注释掉fastJsonConfig中的JSONWriter.Feature.WriteNullNumberAsZero的样子,而现在的情况是全局配置的优先级貌似高于我自己的实现了!
这样貌似可以?
调用toJsonString的话是可以的,但是我在调用接口时会得到不一致的结果
可以提供简单的复现用例吗?
fastjson2-test.zip 我上传了一个压缩包,一个springboot项目,您可以通过TestController中的接口测试,非常感谢大佬的帮助!
请问这个问题该如何解决呢?是我的使用方式不对吗?
同样的问题
和你遇到同样的问题, 该BUG已解决,请更新到最新版本。
请问这个问题该如何解决呢?是我的使用方式不对吗?
直接换成这个就可以了,你试试吧