我正在尝试使用 Jackson 来为我管理类型,但我想使用组合而不是使用继承来创建类型,并拥有一组带有一些注释的工厂方法,这些注释将指示 Jackson 这些是什么类型。具体例子:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
public interface MyInterface {
void doStuff();
// Factories
@JsonCreator
@JsonSubTypes.Type(value = MyInterface.class, name = "impl1")
static MyInterface impl1() {
return new MyInterfaceWithComposition(() -> System.out.println("Impl1"));
}
@JsonCreator
@JsonSubTypes.Type(value = MyInterface.class, name = "impl2")
static MyInterface impl2() {
return new MyInterfaceWithComposition(() -> System.out.println("Impl2"));
}
}
public class MyInterfaceWithComposition implements MyInterface {
private final Runnable task;
public MyInterfaceWithComposition(Runnable task) {
this.task = task;
}
@Override
public void doStuff() {
task.run();
}
}
我知道我可以创建自定义序列化器/反序列化器,但我希望有一种方法可以避免它并使 Jackson 完成所有工作。
在我看来,做这件事不应该这么难。我错过了一些 jackson 技巧/注释吗?我很感激你的帮助。
最佳答案
@JsonUnwrapped 可用于合成。Person
的序列化
public class Person {
public int age;
@JsonUnwrapped
public Name name;
}
生成以下 JSON。 {
"age" : 18,
"first" : "John",
"last" : "Doe"
}
引用:关于java - 使用 Jackson 组合而不是继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433750/