杰克逊为抽象类定制反序列化器

时间:2017-08-28 08:16:16

标签: java jackson deserialization abstract-class

我有一个通过JSON从客户端发送到服务器的对象。对象本身具有多个属性,这些属性本身就是复杂的数据类型。其中大多数都可以通过标准的杰克逊解串器进行序列化。

Hovewer一些属性属于抽象超类的不同子类,它们本身具有属于不同抽象超类的子类的属性。

问题在于我没有@JacksonDeserializer类中对象所属的类的信息。

层次结构可以这样看:

public class PetOwner extends Person {

    public String name;
    public ArrayList<Pet> pets;
}

public class CatOwner extends Person {

    public String name;
    public Cat cat;
}

public class Cat extends Pet {

    public String name;
    public String color;
}
//Both Person and Pet are abstract classes

这些只是用于说明问题的示例类。 我需要Deserializer来执行以下操作: 对于CatOwner的所有实例,cat可以直接反序列化,因为它是非abstact类的实例。对于PetOwner的所有实例,他的宠物需要在不知道它们所属的子类的情况下被反序列化(=它们是哪种类型的宠物)。

现在的问题是,如果我没有关于哪种类型的@JacksonDeserializer必须被反序列化的信息,我是否可以告诉Pet类只被调用?

我尝试了以下方式: 在@JacksonDeserializer Pet课程中,我创建了一个随机类型的宠物,给它一个ID,然后通过查找将其在服务中转换为正确的Pet类型身份证。 这适用于所有者为PetOwner的情况。但如果所有者是CatOwner,则显然不能仅将cat属性设置为例如Dog。一个@JacksonDeserializer个对象。因此,如果所有者为PetOwner

,我希望仅调用react-native-push-notification

0 个答案:

没有答案