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

jas*_*mar 6 java serialization json jackson fasterxml

我想要的是有条件地为类的对象使用默认的 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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过做类似的事情:

serializerProvider.defaultSerializeValue(o, jsonGenerator);
Run Code Online (Sandbox Code Playgroud)

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

Sta*_*Man 2

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