以下是我想要与杰克逊反序列化的示例JSON。
{
"person": {
"contacts": {
"address": {
"type": "Office",
"street": "1600 Amphitheatre Parkway",
"city": "Mountain View",
"state": "CA",
"zip": "94043",
"country": "United States"
},
"email": {
"type": "Home",
"emailAddress": "e.schmidt@google.com"
},
"phone": [
{
"type": "Mobile",
"phoneNumber": "+1 888 555555"
},
{
"type": "Home",
"phoneNumber": "+1 888 1111111"
}
],
"website": {
"type": "work",
"webService": "URL",
"webAddress": "www.google.com"
}
},
"firstName": "Eric",
"lastName": "Schmidt"
}
}
这里反序列化的棘手要点是contacts节点。 注意事项:
email
,address
,website
) OR 一个数组(如果有多个),则此包装器可以是一个对象({ {1}})目标POJO:
phone
注意:外部要求要求我使用抽象public class Person
{
public String firstName;
public String LastName;
public List<Contact> contacts; // mixes Address, Phone, Email, Website
}
public abstract class Contact {
public Long id;
}
public class Phone extends Contact
{
public String type;
public String phoneNumber;
}
// other subtypes of Contact omitted for brevity
类型。我宁愿直接反序列化这些POJO ,而不是让联系人类型挂起的中间Contact
POJO,并在另一步骤中手动映射/转换到我的列表。
我查看了许多其他杰克逊+多态反序列化问题,但似乎没有人处理这种情况(特别是#2和#3)。
我想将联系人对象反序列化为Contacts
。
实现此目的所需的List<Contact>
和@JsonTypeInfo
的正确应用是什么?
(如果有人有兴趣,这是CapsuleCRM's JSON format)
答案 0 :(得分:1)
您需要编写自定义反序列化程序并将其注册到Jackson。实现将检查初始启动然后相应地解析。想想萨克斯风格的处理。