本篇主要讲述在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;
}
}
网友评论