我有以下数据结构:
class User {
String name;
ContactDetails contactDetails;
}
class ContactDetails {
String street;
String area;
}
class PersonalContactDetails extends ContactDetails {
String mobileNumber;
}
class OfficeContactDetails extends ContactDetails {
String officeNumber;
}
在上述数据结构中,User Object中的ContactDetails字段可以包含类型为' PersonalContactDetails'或者' OfficeContactDetails'。
请求可以包含以下JSON字符串:
{
"name" : "John",
"contactDetails" : {
"street" : "7",
"area" : "NY",
"mobileNumber" : "9898xxxxx"
}
}
上述JSON字符串的解组为User的User提供了contactDetails字段,该字段仅包含两个参数,即街道和区域。
我希望unmarshall的输出在ContactDetails字段中设置具有有效mobileNumber的Object of PersonalContactDetails类。
答案 0 :(得分:2)
请求需要显示子类的类型:
{
"name" : "John",
"contactDetails" : {
"@type" : "PersonalContactDetails",
"street" : "7",
"area" : "NY",
"mobileNumber" : "9898xxxxx"
}
}
要显示额外的 @type 属性,请使用以下注释:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(PersonalContactDetails.class),
@JsonSubTypes.Type(OfficeContactDetails.class) }
)
class ContactDetails {
String street;
String area;
}
答案 1 :(得分:1)
以下是不需要添加 @type 注释来输入JSON的解决方案:
{
"name" : "John",
"contactDetails" : {
"street" : "7",
"area" : "NY",
"mobileNumber" : "9898xxxxx"
}
}
以下是对数据类应用的注释:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = “type”)
@JsonSubTypes({
@JsonSubTypes.Type(PersonalContactDetails.class, name="PersonalContactDetails"),
@JsonSubTypes.Type(OfficeContactDetails.class, name="OfficeContactDetails") }
)
class ContactDetails {
String street;
String area;
}
@JsonTypeName("PersonalContactDetails")
class PersonalContactDetails extends ContactDetails {
String mobileNumber;
}
@JsonTypeName("OfficeContactDetails")
class OfficeContactDetails extends ContactDetails {
String officeNumber;
}