Jackson 自定义 JsonSerializer - 有条件地调用默认序列化程序
Jackson custom JsonSerializer - conditionally call default serializer
我想要的是有条件地为我的 class 对象使用默认的 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 对象?
这需要更复杂的设置:不是直接重写序列化程序来使用,而是需要让 Jackson 创建一个,然后接管。
这可以通过注册 BeanSerializerModifier
(通过 Module
)方法 modifySerializer(...)
来完成。您将获得要使用的默认序列化器,您可以构建自定义序列化器,传递默认序列化器。
我想要的是有条件地为我的 class 对象使用默认的 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 对象?
这需要更复杂的设置:不是直接重写序列化程序来使用,而是需要让 Jackson 创建一个,然后接管。
这可以通过注册 BeanSerializerModifier
(通过 Module
)方法 modifySerializer(...)
来完成。您将获得要使用的默认序列化器,您可以构建自定义序列化器,传递默认序列化器。