Jackson 的 @JsonTypeInfo(use = Id.CUSTOM, include = As.PROPERTY, property = "type") 读取 JSON
Posted
技术标签:
【中文标题】Jackson 的 @JsonTypeInfo(use = Id.CUSTOM, include = As.PROPERTY, property = "type") 读取 JSON 的所有字段,除了 "type"【英文标题】:Jackson's @JsonTypeInfo(use = Id.CUSTOM, include = As.PROPERTY, property = "type") reads all fields of JSON except for "type" 【发布时间】:2017-02-04 12:03:06 【问题描述】:我逐行浏览了每一行代码,但我认为这就是 Jackson 在内部处理多态性的方式。
使用Dog
和Cat
扩展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;
狗类:
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;
猫类:
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;
AnimalTypeIdResolver
是扩展 AbstractTypeIdResolver
的典型 TypeIdResolver。
出于某种非常奇怪的原因,bark_decibel
和 meow_level
从 JSON 反序列化,但 type
以 null
的形式进入。有什么想法吗?
【问题讨论】:
复制:Jackson - @JsonTypeInfo property is being mapped as null? 【参考方案1】:将visible=true
设置为@JsonTypeInfo
:
@JsonTypeInfo(use = Id.CUSTOM, include = As.PROPERTY, property = "type", visible=true)
参考this post
【讨论】:
以上是关于Jackson 的 @JsonTypeInfo(use = Id.CUSTOM, include = As.PROPERTY, property = "type") 读取 JSON的主要内容,如果未能解决你的问题,请参考以下文章
Jackson 的 @JsonTypeInfo(use = Id.CUSTOM, include = As.PROPERTY, property = "type") 读取 JSON
Spring Boot 忽略 Rest Controller 中的 Jackson 注释