一尘不染

杰克逊自定义JsonSerializer-有条件地调用默认序列化器

json

我想要的是对类的对象有条件地使用默认BeanSerializer:

class MyCustomSerializer extends StdSerializer<AbstractEntity> {

    public MyCustomSerializer() {
        super(AbstractEntity.class);
    }

    @Override
    public void serialize(AbstractEntity o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (someCondition()) {
           serializeNormalWay(); //how?
        } else {
           //custom serialization
        }
    }
}

我试图做这样的事情:

serializerProvider.defaultSerializeValue(o, jsonGenerator);

但这调用了MyCustomSerializer的方法,而且我永无止境地递归。如何获得可以用于普通bean序列化的适当的Serializer对象?


阅读 380

收藏
2020-07-27

共1个答案

一尘不染

这需要更复杂的设置:您需要让Jackson创建一个,然后接管,而不是直接覆盖要使用的序列化器。这可以通过注册BeanSerializerModifier(via
Module)方法来完成modifySerializer(...)。将为您提供将要使用的默认序列化程序,并且您可以构造自定义序列号,并传递该默认序列号。

2020-07-27