栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何覆盖特定类的JsonSerializer的isEmpty方法而不覆盖序列化方法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何覆盖特定类的JsonSerializer的isEmpty方法而不覆盖序列化方法?

为了修改

isEmpty
行为但保持默认的序列化,您可以利用 serializer修饰符
。您仍然必须实现自定义序列化程序,但是可以非常干净地利用默认序列化程序。

使用默认的序列化器创建一个自定义序列化器

defaultSerializer
变量插入到您的自定义序列化器类中。当我们实现修饰符时,您将看到此序列化器的来源。在此类中,您将重写该
isEmpty
方法以完成所需的操作。在下面,如果
MySpecificClass
为空
id
,则Jackson认为它为空。

public class MySpecificClassSerializer extends JsonSerializer<MySpecificClass> {    private final JsonSerializer<Object> defaultSerializer;    public MySpecificClassSerializer(JsonSerializer<Object> defaultSerializer) {        this.defaultSerializer = checkNotNull(defaultSerializer);    }    @Override    public void serialize(MySpecificClass value, JsonGenerator gen, SerializerProvider serializers) throws IOException {        defaultSerializer.serialize(value, gen, serializers);    }    @Override    public boolean isEmpty(SerializerProvider provider, MySpecificClass value) {        return value.id == null;    }}

创建一个自定义
BeanSerializerModifier

扩展

BeanSerializerModifier
和覆盖
modifySerializer
方法。在此方法内,您可以筛选要操作的类类型,并相应地返回自定义序列化程序。

public class MyClassSerializerModifier extends BeanSerializerModifier {    @Override    public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) {        if (beanDesc.getBeanClass() == MySpecificClass.class) { return new MySpecificClassSerializer((JsonSerializer<Object>) serializer);        }        return serializer;    }}

将修饰符注册到
ObjectMapper

注册修饰符将允许您的序列化器在

modifySerializer
满足条件的任何时候触发。

ObjectMapper om = new ObjectMapper()        .registerModule(new SimpleModule()     .setSerializerModifier(new MyClassSerializerModifier()));


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398168.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号