Джексон наследство пустывает, вызывая бесконечную петлюJAVA

Программисты JAVA общаются здесь
Anonymous
Джексон наследство пустывает, вызывая бесконечную петлю

Сообщение Anonymous »

Я пытаюсь опустошить данные JSON в Animal.Class и dog.class , которые расширяют Animal.class с использованием пользовательского Deserializer. Данные JSON ниже представляют собой упрощенную, и реальные данные JSON не могут быть опустошены с помощью @jsonsubtypes

Вот как выглядят коды. < /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);
}
}
Похоже, что return codec.treetavalue (node, animal.class); вызывает бесконечный цикл. Я решил проблему, сделав Animal.class абстрактно и создав новый класс DefaultAnimal.class Но таким образом я должен сделать много избыточных классов по умолчанию '

Пожалуйста, дайте мне знать, если у вас есть какие -либо хорошие идеи.

Подробнее здесь: https://stackoverflow.com/questions/796 ... inite-loop

Вернуться в «JAVA»