我在应用程序开发中遇到麻烦。我的任务是我有一个包含一组人物对象的服务对象。 person对象有两个派生对象,称为student和teacher。我作为json
对象从客户端到服务器获取此服务对象。在服务器端,我可以使用List<Person>
方法从服务中获取service.getPersonList()
对象。但是我无法获得Person
的子课程。我的代码就像这样
//人
public class Person {
private String name;
private Integer type;
public static final Integer TYPE_STUDENT = 1 ;
public static final Integer TYPE_TEACHER = 2 ;
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//学生
public class Student extends Person{
private Integer year;
public Integer getYear() {
return year;
}
public void setYear(Integer year) {
this.year = year;
}
}
//教师
public class Teacher extends Person{
private String dept;
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
}
//服务
public class Service {
private List<Person> personList;
public List<Person> getPersonList() {
return personList;
}
public void setPersonList(List<Person> personList) {
this.personList = personList;
}
}
//我的json对象就像这样
[{"year":"4","name":"sreenu","type":1},{"dept":"physics","name":"somehow","type":2}]
我试图通过使用type属性来查找子类。我得到类型值意味着父对象,但无法从中获取子对象。 我怎么解决这个问题?
在控制器中我得到像这样的json对象
//控制器 public String saveService(@RequestBody String service){
List<Person> personList = (List<Person>) gson.fromJson(
data, new TypeToken<List<Person>>(){}.getType()
);
for(Person person : personList) {
if(person.getType() == Person.TYPE_STUDENT) {
Student student = (Student) person;
System.out.println(student.getYear());
}
if(person.getType() == Person.TYPE_TEACHER) {
Teacher teacher = (Teacher) teacher;
System.out.println(teacher.getDept());
}
}
}
我正在获得类强制转换异常。即使我尝试过运营商的实例。
答案 0 :(得分:0)
您正在反序列化为更简单的类型(Person)而不是更复杂的类型(Student / Teacher)。这意味着正在丢弃其他子类型信息(如年份或部门)。学生可以作为一个人进行演员,但不能将一个人演员作为学生。
这反映了设计问题。您需要更改Person类,使其包含子类型所需的所有可能数据,或者在从Json创建对象之前,您需要抢先将数据隔离到教师和学生中。