Вот как выглядят коды. < /P>
с учетом данных JSON (я не могу изменить формат данных JSON) < /li>
< /ol>
[
{
"name": "dog name",
"type": "dog",
"age": 5
},
{
"name": "cat name",
"type": "cat",
"color": "black"
}
]
< /code>
Classes < /li>
< /ol>
Код: Выделить всё
class Animal {
String name;
}
@JsonDeserialize()
class Dog extends Animal {
String name;
int age;
}
< /code>
Custom Deserializer: Deserialize JSON с помощью "type": "Dog" < /code> для собаки и всех других животных для животных < /li>
< /ol>
public class AnimalDeserializer extends StdDeserializer {
@Override
public Animal deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
ObjectCodec codec = p.getCodec();
JsonNode node = codec.readTree(p);
JsonNode typeNode = node.get("type");
if (typeNode != null && !typeNode.isNull()) {
String typeText = typeNode.asText();
if (typeText.equals("dog")) {
return codec.treeToValue(node, Dog.class);
}
}
return codec.treeToValue(node, Animal.class);
}
}
Пожалуйста, дайте мне знать, если у вас есть какие -либо хорошие идеи.
Подробнее здесь: https://stackoverflow.com/questions/796 ... inite-loop