Весь приведенный ниже код является упрощенной версией. У меня есть JSON структуру:Jackson использует индивидуальный десериализатор JSON по умолчанию
{
"content" : {
"elements" : [ {
"type" : "simple"
},
{
"type" : "complex",
"content" : {
"elements" : [ {
"type" : "simple"
},
{
"type" : "simple"
},
{
"type" : "complex",
"content" : {
---- /// ----
}
} ]
}
} ]
}
}
я использую Джексон LIB для десериализации, и я пытаюсь реализовать своего рода «смешивать» с обычаем по умолчанию deserializers. Я хочу, чтобы объект Element создавал с помощью пользовательского ElementDeserializer, но для поля Content внутри используется значение по умолчанию. К сожалению, такие вещи:
@JsonDeserialize(using = StdDeserializer.class)
@JsonProperty
Content content;
не работает = (
Вот мой код прямо сейчас:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Content {
@JsonProperty("elements")
ArrayList<Element> mElements;
}
@JsonDeserialize(using = ElementDeserializer.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Element<T extends ElementType> {
@JsonProperty
Content content;
T mField;
public Element(T field) {
mField = field;
}
}
public class ElementDeserializer extends JsonDeserializer<Element> {
@Override
public Element deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
Element element = null;
JsonNode node = jp.getCodec().readTree(jp);
if ("simple".equals(node.get("type").textValue())) {
element = new Element(new SimpleField());
} else if ("complex".equals(node.get("type").textValue())) {
element = new Element(new ComplexField());
}
return element;
}
}
Я буду благодарен за некоторую помощь
Спасибо большое за ваш ответ - очень интересно! Недавно я не знал о JsonTypeInfo и JsonSubTypes. Я постараюсь приспособить это решение к моему делу. – ADK