2016-09-27 1 views
3

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?

Répondre

2

Set visible=true pour @JsonTypeInfo:

@JsonTypeInfo(use = Id.CUSTOM, include = As.PROPERTY, property = "type", visible=true) 

Référez this post