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

时间:2015-05-04 10:58:11

标签: java json serialization 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
        }
    }
}

我试图做那样的事情:

serializerProvider.defaultSerializeValue(o, jsonGenerator);

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

1 个答案:

答案 0 :(得分:2)

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