【发布时间】:2023-04-08 02:51:01
【问题描述】:
我想创建一个自定义序列化程序,它会做一些工作,然后将其余部分留给默认序列化。
例如:
@JsonSerialize(using = MyClassSerializer.class)
public class MyClass {
...
}
public class MyClassSerializer extends JsonSerializer<MyClass> {
@Override
public void serialize(MyClass myClass, JsonGenerator generator,
SerializerProvider provider)
throws JsonGenerationException, IOException {
if (myClass.getSomeProperty() == someCalculationResult) {
provider.setAttribute("special", true);
}
generator.writeObject(myClass);
}
}
考虑为聚合对象创建其他自定义序列化程序,这些聚合对象的行为基于“特殊”属性值而不同。但是,上面的代码不起作用,因为它毫无疑问地进入了无限递归。
一旦我设置了属性,有没有办法告诉杰克逊使用默认序列化?我真的不想像许多自定义序列化程序那样枚举所有属性,因为该类相当复杂,而且我不想每次更改类时都必须对序列化程序进行双重维护。
【问题讨论】:
-
不是重复的,但可能值得一读:stackoverflow.com/questions/18313323/…。
BeanSerializerModifier部分似乎也适用于序列化。