5

我想要的是有条件地为我的类的对象使用默认的 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 序列化?

4

1 回答 1

2

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

于 2015-05-04T22:01:22.153 回答