美文网首页
Jackson多态支持

Jackson多态支持

作者: Wang_Coder | 来源:发表于2017-09-03 14:15 被阅读689次

背景

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的注解。

相关文章

  • Jackson多态支持

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

  • @JsonTypeInfo 解决 @RequestBody Ba

    @JsonTypeInfo 主要是用来解决反序列化时,多态的问题。 Jackson注解 @JsonTypeInfo...

  • 多态的意义和操作过程

    多态 首先Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型。以下是维基百科中对鸭子...

  • Spring MVC @JsonView使用详解

    Spring 提供了对Jackson 非常好的支持,可以查看此spring-jackson-demo代码来掌握。这...

  • C++ 的多态(Polymorphism), virtual f

    多态 c++支持两种多态,编译时多态和运行时多态但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,ov...

  • Python:多态、鸭子模型和抽象基类

    1. 多态 什么是多态-- 多态,指的是一种事务具有多种形态;-- python是一种动态语言,默认支持多态,同一...

  • python常用的一些技巧

    1、三目操作符 2、鸭子类型(duck typing) 首先Python不支持多态,也不用支持多态,python是...

  • Java Jackson @JsonTypeInfo 多态类型处

    jackson允许配置多态类型处理,当进行反序列话时,JSON数据匹配的对象可能有多个子类型,为了正确的读取对象的...

  • golang-面向对象

    思考:go语言不支持继承与多态的优点与缺点是什么 go语言只支持封装,不支持继承与多态 go语言没有class,只...

  • 【Golang 基础】Go 语言 面向对象

    Go 语言的面向对象   Go 语言的面向对象非常简单,仅支持封装,不支持继承和多态。继承和多态是在接口中实现的。...

网友评论

      本文标题:Jackson多态支持

      本文链接:https://www.haomeiwen.com/subject/cmfjjxtx.html