美文网首页Java 杂谈
Java Jackson子类反序列化

Java Jackson子类反序列化

作者: 十六郎 | 来源:发表于2018-11-30 17:37 被阅读0次

    本篇主要讲述在Service通过http互相调用期间,封装子类对象并完成反序列化还原Object的过程。
    参考: https://www.baeldung.com/jackson-inheritance

    lib:

    • javax.ws.rs;
    • com.fasterxml.jackson;

    父类

    @JsonIgnoreProperties
    @JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.PROPERTY,
        property = "type")
    @JsonSubTypes({
        @JsonSubTypes.Type(value = BMW.class, name = "com.package1.BMW"),
        @JsonSubTypes.Type(value = Benz.class, name = "com.package1.Benz")
    })
    public abstract class Car {
          private String brandName;
          public abstract void drive();
    }
    
    

    注意点子类的name若不以全路径命名比如直接name = "BMW",有可能会报错

    子类

    注意点子类需要有默认构造函数

    解析还原

    Case1: 还原单个JSON String

    封装场景:

    public class CarSquare{
       String address;
        List<Car> cars;
    }
    
    ObjectMapper mapper = new ObjectMapper();
    mapper.enableDefaultTyping();
    CarSquare carSquare =  mapper.readValue(jsonDataString, CarSquare.class);
    

    Case2: 还原JSON List

    ObjectMapper mapper = new ObjectMapper();
    mapper.enableDefaultTyping();
    JavaType javaType = mapper.getTypeFactory().constructParametricType(ArrayList.class, Car.class);
    List<Car> cars =  mapper.readValue(jsonDataString, javaType); 
    for(Car car: cars){
        if(car.getBrandName.equals("BMW")){
               BMW bmw = (BMW)car;
        }
    }
    

    相关文章

      网友评论

        本文标题:Java Jackson子类反序列化

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