我尝试使用 ObjectMapper 反序列化 json 但遇到了一些问题。也许我想要的东西用 ObjectMapper 是不可能的,但无论如何我都会要求一个好的方法。假设我有一个包含这样的对象列表的类:
public class SomeClass {
ArrayList<BaseClass> list;
}
public class BaseClass {
String id;
String type;
}
public class MyClass1 extends BaseClass{
}
public class MyClass2 extends BaseClass{
}
还有这样的 json:
{
"list": [
{
"id": "1",
"type": "MyClass1",
},
{
"id": "2",
"type": "MyClass2",
},
{
"id": "3",
"type": "MyClass1",
}
]
}
问题是如何告诉 ObjectMapper 创建并放入列表中的不是
BaseClass
对象,而是 MyClass1, MyClass2...
对象取决于“type”的值?这可能吗?
您可以尝试创建一个客户映射器,例如:
public class CustomDeserializer extends JsonDeserializer<BaseClass> {
@Override
public BaseClass deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
String type = node.get("type").asText();
String id = node.get("id").asText();
if ("MyClass1".equals(type)) {
MyClass1 myClass1 = new MyClass1();
myClass1.id = id;
myClass1.type = type;
return myClass1;
} else if ("MyClass2".equals(type)) {
MyClass2 myClass2 = new MyClass2();
myClass2.id = id;
myClass2.type = type;
return myClass2;
}
return null; // or throw an exception
}
}
public class SomeClass {
@JsonDeserialize(contentUsing = CustomDeserializer.class)
ArrayList<BaseClass> list;
}