Java 使用Jackson进行合成而不是继承
我试图使用Jackson来为我管理类型,但是我不想使用继承来创建类型,我想使用合成,并有一组工厂方法和一些注释来指导Jackson这些类型是什么。具体例子:Java 使用Jackson进行合成而不是继承,java,json,inheritance,jackson,composition,Java,Json,Inheritance,Jackson,Composition,我试图使用Jackson来为我管理类型,但是我不想使用继承来创建类型,我想使用合成,并有一组工厂方法和一些注释来指导Jackson这些类型是什么。具体例子: @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") public interface MyInterface { void doStuff(); // Factories @JsonCreator @JsonSubTypes.Type(
@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完成所有工作
我觉得做这件事不应该这么难。我是否错过了一些杰克逊的技巧/注释?谢谢你的帮助