【问题标题】:Jackson custom JsonSerializer - conditionally call default serializerJackson 自定义 JsonSerializer - 有条件地调用默认序列化器
【发布时间】:2015-07-13 17:41:24
【问题描述】:

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

【问题讨论】:

    标签: java json serialization jackson fasterxml


    【解决方案1】:

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

    【讨论】:

    • 好的,这就是我要找的,谢谢。我还发现了类似的问题,描述更详细:stackoverflow.com/questions/14714328/…
    • 好吧好吧。这不是一个罕见的用例,但支持 wrt 后备是相当棘手的。很高兴你能解决它。
    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2021-11-07
    • 1970-01-01
    • 2017-09-10
    • 2018-01-31
    相关资源
    最近更新 更多