J'utilise Jackson et j'ai des problèmes. Lorsque j'essaie de désérialiser un objet, l'erreur suivante apparaît:
com.fasterxml.jackson.databind.JsonMappingException:
Can not construct instance of net.MyAbstractClass,
problem: abstract types either need to be mapped to concrete types,
have custom deserializer, or be instantiated with additional type information
J'ai des problèmes dans l'attribut:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT, property = "@id")
@JsonSubTypes({ @JsonSubTypes.Type(value = MyAbstractClass.class, name = "MyAbstractClass") })
@ManyToOne
private MyAbstractClass object;
Quelqu'un pourrait-il m'aider?
Vous ne pouvez pas instancier une classe abstraite, Jackson non plus. Vous devez indiquer à Jackson comment instancier MyAbstractClass avec un type concret.
Voir cette réponse sur stackoverflow: bibliothèque Jackson JSON: comment instancier une classe contenant des champs abstraits
Et peut-être aussi voir désérialisation polymorphe de Jackson
Votre @JsonSubTypes
déclaration n'a pas de sens: il faut lister les (sous-) classes d'implémentation, PAS la classe elle-même (ce qui serait inutile). Vous devez donc modifier cette entrée pour répertorier les sous-classes existantes; ou utilisez un autre mécanisme pour enregistrer des sous-classes (SimpleModule
a quelque chose comme addAbstractTypeMapping
).