示例
爪哇:
@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'}
}
答案 0 :(得分:1)
您认为您知道此字段的动态类型(实际类型),因为静态类型为Dog
而非Animal
仅在没有Dog
的子类时才有效。如果您创建Dog
班final
,那么杰克逊知道它可以安全地省略类型信息。
此外,您可以通过在Dog,
类的定义中添加@JsonTypeInfo
注释,以更复杂的方式为静态类型Dog
的字段覆盖Jackson的类型信息设置。 / p>