Ich brauche Hilfe, hier ist die Beschreibung der Aufgabe:
1. Ich habe Basis SchnittstelleDeserialize JSON mit Jackson mit komplexer polymorpher Struktur
interface IPolymorphicModel
2. Ich habe einige verschachtelten Schnittstellen:
interface IContentItem extends IPolymorphicModel
interface IAttachment extends IPolymorphicModel
3. ich habe einige Implementierungen:
public class MediaAttachment implements IAttachment
public class Article implements IContentItem {
private List<IAttachment> attachements;
}
I usi bin ng jackson (auch ich probierte Gson
mit registerTypeAdapterFactory
), um aktuelle JSON-Struktur zu analysieren. Ich verwende nächsten Ansatz für Deserialisierung json mit einzelnen Deserializer für alle verschachtelten Objekte:
Module module = new SimpleModule()
module.setDeserializerModifier(new BeanDeserializerModifier() {
public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config,
BeanDescription beanDesc,
JsonDeserializer<?> deserializer){
if (IPolymorphicModel.class.isAssignableFrom(beanDesc.getBeanClass())){
return new PolymorphicJsonDeserializer()
}
return super.modifyDeserializer(config, beanDesc, deserializer);
})
Aber es ist das Problem mit inneren Elemente-Analyse: wie Sie inneres Objekt sehen kann Objekt mit den gleichen super
enthalten, und wenn jackson versuchen, sie zu analysieren es weiß nichts über IPolymorphicModel
und die Registrierung derselben BeanDeserializerModifier
ist nicht möglich, weil es Stapelüberlauf verursachen wird.