在 REST 中解组复合对象 API
Unmarshalling of Composite Objects in REST API
我有以下数据结构:
class User {
String name;
ContactDetails contactDetails;
}
class ContactDetails {
String street;
String area;
}
class PersonalContactDetails extends ContactDetails {
String mobileNumber;
}
class OfficeContactDetails extends ContactDetails {
String officeNumber;
}
在上述数据结构中,用户对象中的ContactDetails字段可以包含'PersonalContactDetails'或'OfficeContactDetails'类型的对象。
请求可以包含以下 JSON 字符串:
{
"name" : "John",
"contactDetails" : {
"street" : "7",
"area" : "NY",
"mobileNumber" : "9898xxxxx"
}
}
以上 JSON 字符串的解组给出了具有仅包含两个参数的 contactDetails 字段的用户对象,即街道和区域。
我希望 unmarshall 的输出具有在 ContactDetails 字段中设置的 PersonalContactDetails class 对象和有效的 mobileNumber。
请求需要显示子类的类型:
{
"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;
}
以下是不需要在输入JSON中添加@type注解的解决方案:
{
"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;
}
我有以下数据结构:
class User {
String name;
ContactDetails contactDetails;
}
class ContactDetails {
String street;
String area;
}
class PersonalContactDetails extends ContactDetails {
String mobileNumber;
}
class OfficeContactDetails extends ContactDetails {
String officeNumber;
}
在上述数据结构中,用户对象中的ContactDetails字段可以包含'PersonalContactDetails'或'OfficeContactDetails'类型的对象。
请求可以包含以下 JSON 字符串:
{
"name" : "John",
"contactDetails" : {
"street" : "7",
"area" : "NY",
"mobileNumber" : "9898xxxxx"
}
}
以上 JSON 字符串的解组给出了具有仅包含两个参数的 contactDetails 字段的用户对象,即街道和区域。
我希望 unmarshall 的输出具有在 ContactDetails 字段中设置的 PersonalContactDetails class 对象和有效的 mobileNumber。
请求需要显示子类的类型:
{
"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;
}
以下是不需要在输入JSON中添加@type注解的解决方案:
{
"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;
}