如何反序列化以下示例,以便 Jackson 自动为我提供正确的对象
public class vehicle {
String vehicleType;
}
public class car extends vehicle {
String carType;
String make;
}
public class sedan extends car {
String model;
}
我理想的情况是将 json 结构传递给以下代码,并创建正确子类型的对象。 例如:
ObjectMapper mapper = new ObjectMapper();
vehicle myVehicle = mapper.readValue(inputData, vehicle.class);
Assertions.assertInstanceOf(sedan.class, myVehicle);
上述测试对于以下 json 数据应该成立
{
"vehicleType" : "car",
"carType" : "sedan",
"make" : "Foo",
"model" : "Bar"
}
我可以使用某些东西正确获得最多 1 级继承,以达到以下效果
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "vehicleType")
@JsonSubTypes({
@JsonSubTypes.Type(value = car.class, name = "car")
})
public class vehicle {...}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "carType")
@JsonSubTypes({
@JsonSubTypes.Type(value = sedan.class, name = "sedan")
})
public class car extends vehicle {...}
public class sedan extends car {...}
当我运行上面的代码时,我得到一个 car 类型的对象,而不是 sedan 类型的对象。
您需要在
vehicle
中列出所有子类型。
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "vehicleType")
@JsonSubTypes({
@JsonSubTypes.Type(value = car.class, name = "car"),
@JsonSubTypes.Type(value = sedan.class, name = "sedan")
})
public class vehicle {...}