3

这个例子

爪哇:

    @JsonTypeInfo(  
            use = JsonTypeInfo.Id.MINIMAL_CLASS,  
            include = JsonTypeInfo.As.PROPERTY,  
            property = "@type")
    public class Pet{ 
        String name;
    }

    public class Dog extends Pet{}
    public class Cat extends Pet{}

    public class PetHouse {
        List<Pet> pets;
    }

    public class BarkingData {
        int decibels;
        Dog dog;
    }

JSON序列化

    petHouse = {
        pets :
        [
            {'@type': 'Dog', 'name':'Droopy'},
            {'@type': 'Cat', 'name':'Scratchy'},
            {'@type': 'Dog', 'name':'Snoopy'}
        ]
    }

    barkingData = {
        decibels:15,
        dog:{'@type':'Dog', 'name':'Droopy'}
    }

Question 类 BarkingData 有一个 Dog 类型的字段(猫不会吠叫)。对于可以从声明字段“提示”该类型的实例,是否可以告诉杰克逊不要包含 typeInfo ?

因此 Barking 数据的输出如下所示:

    barkingData = {
        decibels:15,
        dog:{'name':'Droopy'}
    }
4

1 回答 1

1

您知道该字段的动态类型(实际类型)的想法,因为静态类型Dog不仅Animal在没有Dog. 如果你Dog上课final,那么杰克逊知道它可以安全地省略类型信息。

Dog,此外,您可以通过在类的定义中添加@JsonTypeInfo注释以更复杂的方式覆盖 Jackson 的类型信息设置,用于静态类型的字段Dog

于 2013-09-18T16:59:31.880 回答