Java Jackson子类反序列化

本篇主要讲述在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 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 cars =  mapper.readValue(jsonDataString, javaType); 
for(Car car: cars){
    if(car.getBrandName.equals("BMW")){
           BMW bmw = (BMW)car;
    }
}

你可能感兴趣的:(Java Jackson子类反序列化)