在特定(领域)情况下隐藏杰克逊类型信息?

时间:2013-06-24 19:24:39

标签: jackson

示例

爪哇:

    @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'}
    }

问题 BarkingData类有一个类型为Dog的字段(猫不会吠叫它们)。是否有可能告诉杰克逊不要在声明字段中“暗示”该类型的情况下包含typeInfo?

这样Barking数据的输出如下:

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

1 个答案:

答案 0 :(得分:1)

您认为您知道此字段的动态类型(实际类型),因为静态类型为Dog而非Animal仅在没有Dog的子类时才有效。如果您创建Dogfinal,那么杰克逊知道它可以安全地省略类型信息。

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