J'ai traversé chaque ligne de code, mais je pense que c'est comme ça que Jackson gère polymorphisme interne.@JsonTypeInfo de Jackson (utiliser = Id.CUSTOM, include = As.PROPERTY, propriété = "type") lit tous les champs de JSON sauf "type"
En utilisant l'exemple classique de Dog
et Cat
extension Animal
:
@JsonTypeInfo(use = Id.CUSTOM, include = As.PROPERTY, property = "type")
@JsonTypeIdResolver(AnimalTypeIdResolver.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class Animal implements Serializable {
public AnnotatorBundleConfig(String name) {
super();
this.name = name;
}
La classe chien:
public class DogAnimal extends Animal {
@JsonCreator
public DogAnimal(
@JsonProperty(value="name", required=true) String name,
@JsonProperty(value="bark_decibel") int bark_decibel)
{
super(name);
this.bark_decibel = bark_decibel;}
La classe de chat:
public class CatAnimal extends Animal {
@JsonCreator
public CatAnimal(
@JsonProperty(value="name", required=true) String name,
@JsonProperty(value="meow_level") int meow_level)
{
super(name);
this.meow_level = meow_level;}
Le AnimalTypeIdResolver
est un TypeIdResolver typique ça exte nds AbstractTypeIdResolver
.
Pour une raison très étrange, bark_decibel
et meow_level
sont désérialisée de JSON, mais type
est d'entrer dans le null
comme. Des idées?