我有一个Spring项目,其中有一个抽象类Person,如下所示
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({@Type(value=Employee.class, name="employee"), @Type(value = Driver.class, name = "driver")})
public abstract class Person {
}
我有这个Person类的两个实现,Employee和Driver,如下所示
@JsonTypeName("employee")
public class Employee extends Person {
private int field1;
private int field2;
//some getters and setters
}
@JsonTypeName("driver")
public class Driver extends Person {
private int field3;
private int field4;
private int field5;
//some getters and setters
}
Person对象包含在Company类中,如下所示
public class Company {
private String name;
private int id;
private Person person;// this is the object
private int people;
}
现在,我收到json格式的请求,其中一个字段是这个person对象,如下所示:
{
"name": "some name",
"id": 123,
"person":{
"type": "employee"
"field1":"some field1 value",
"field2":"some field2 value"
},
"people": 100
}
问题是,该人员可以是驾驶员或雇员类型。字段“类型”(不是以变量的形式出现)被传入json,相应的对象被示例化。但是,我无法获得示例化对象,因为示例化发生在运行时,我无法在代码中判断哪个类被示例化。因此,无法调用相应对象的getter(员工或驾驶员)。
是否有一种方法可以获得示例化的对象,以便可以对对象的字段(对于employee,为field 1和field 2;对于driver,为field 3、field 4和field 5)(比如company.getPerson().getField1();
)执行任何操作
先谢谢你
1条答案
按热度按时间5uzkadbs1#
如果
getField1()
是Employee
的一个方法而不是任何Person
的方法,那么不,你不能做getPerson().getField1()
。这就是逻辑,如果你在
Person
上调用getField1()
,那么这就意味着你知道这个Person
是Employee
而不是Driver
。因此,只需将处理
Employee
的代码与处理Driver
的代码分开即可: