【问题标题】:Hiding Jackson type info on certain (fields) situations?在某些(字段)情况下隐藏杰克逊类型信息?
【发布时间】:2013-06-24 19:24:39
【问题描述】:

例子

Java:

    @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 ?

所以吠叫数据的输出看起来像:

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

【问题讨论】:

    标签: jackson


    【解决方案1】:

    您认为您知道该字段的动态类型(实际类型),因为静态类型是 Dog 而不是 Animal 只有在没有 Dog 的子类时才有效。如果您将Dog 类设为final,那么Jackson 知道它可以安全地省略类型信息。

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

    【讨论】:

      猜你喜欢
      • 2017-02-15
      • 1970-01-01
      • 2016-06-15
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多