杰克逊的@JsonTypeInfo(use = Id.CUSTOM,include = As.PROPERTY,property =“ type”)读取JSON的所有字段(“ type”除外)

THI*_*ELP 4 java json jackson jackson2

我逐步完成了每一行代码,但是我认为这就是Jackson内部处理多态性的方式。

使用DogCat扩展的经典示例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;
    }
Run Code Online (Sandbox Code Playgroud)

狗类:

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;}
Run Code Online (Sandbox Code Playgroud)

猫类:

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;}
Run Code Online (Sandbox Code Playgroud)

AnimalTypeIdResolver是,延伸的典型TypeIdResolver AbstractTypeIdResolver

由于某些非常奇怪的原因,bark_decibel并且meow_level从JSON反序列化,但是却以的type形式进入null。有任何想法吗?

THI*_*ELP 5

设置visible=true@JsonTypeInfo

@JsonTypeInfo(use = Id.CUSTOM, include = As.PROPERTY, property = "type", visible=true)
Run Code Online (Sandbox Code Playgroud)

推荐这个职位