Jackson多态支持

背景

Json转为类时,结构并不完全一致,是由几个子类继承父类而成,直接使用父类的Class没法直接将json转为对应的子类。

使用注解

public class Zoo {
    public Animal animal;
  }

  static class Animal { // All animals have names, for our demo purposes...
    public String name;
    protected Animal() { }
  }

  static class Dog extends Animal {
    public double barkVolume; // in decibels
    public Dog() { }
  }

  static class Cat extends Animal {
    boolean likesCream;
    public int lives;
    public Cat() { }
  }

在父类上加上如下注解

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")

然后将子类用@JsonSubTypes来注册

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")  
@JsonSubTypes({  
  @JsonSubTypes.Type(name="dog",value=Dog.class),  
  @JsonSubTypes.Type(name="cat",value=Cat.class),  
  })  
class Animal { }  

要注意的是所有注解都是在父类的,子类不需改动。

解析的时候用

objectMapper.readValue(json, Animal.class);

即可。

不使用注解

        ObjectMapper mapper = new ObjectMapper();
        mapper.registerSubtypes(Animal.class);
        mapper.registerSubtypes(new NamedType(Dog.class,"dog"));
        mapper.registerSubtypes(new NamedType(Cat.class,"cat"));

这里需要注意的是父类也需要用registerSubtypes注册,且依然需要加上@JsonTypeInfo的注解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 整体Retrofit内容如下: 1、Retrofit解析1之前哨站——理解RESTful 2、Retrofit解析...
    隔壁老李头阅读 12,289评论 4 31
  • 父类与子类 在Java术语中,如果C1类扩展自另一个类C2,我们称C2为父类,也称超类或基类,称C1为子类,也称次...
    Steven1997阅读 5,004评论 1 2
  • (一) 狼在村里迷路了 七七四十九个轮回后 又回到了猎人的屋檐下 不太凑巧 猎人和他的大黄 进山了 狼叼走了 摇篮...
    大朋小雷阅读 2,726评论 1 1
  • 我是吴小丽,每日一篇原创文第1年零138篇(第503篇) 最近小猪佩奇大火,我家宝宝很早就看过我给他买的小猪佩奇的...
    我是吴小丽阅读 4,068评论 0 1
  • 1 中午抽空回家,Alex拿着二张纸跑到我面前,告诉我:“妈妈,这是我画的画,我可以给你讲解一下吧?”我定睛一看,...
    小H嗨皮阅读 1,648评论 0 1

友情链接更多精彩内容