问题描述
我可以使用 Jackson 对我的 JSON 进行反序列化,但在反序列化之后,我无法从相应的 Car/Truck 类值中获取值。
@JsonTypeInfo( use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({ @JsonSubTypes.Type(value = Car.class,name = "car"),@JsonSubTypes.Type(value = Truck.class,name = "truck")
})
public class Vehicle{
private String make;
private String model;
//Getter and Setters
}
@JsonRootName(value = "car")
@JsonTypeName("car")
public class Car extends Vehicle{
private int seatingCapacity;
private double topSpeed;
//Getter and Setters
}
@JsonRootName(value = "truck")
@JsonTypeName("truck")
public class Truck extends Vehicle{
private double payloadCapacity;
//Getter and Setters
}
public class Fleet {
private List<Vehicle> vehicles;
public Car getCar() {
final Car o = new Car();
vehicles.add(o);
return o;
}
public Truck getTruck() {
final Truck o = new Truck();
vehicles.add(o);
return o;
}
// getters and setters
}
public class Client {
public static void main(String args[]) {
final ObjectMapper objectMapper = new ObjectMapper().setSerializationInclusion();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNowN_PROPERTIES,false);
Fleet vehicles = objectMapper.readValue(ApplicationMain.class.getResourceAsstream("/jsonFile.json"),Fleet.class);
System.out.println(vehicles.getVehicles.get(0).getSeartingCapacity());
//Unable to get getSeartingCapacity and getTopSpeed() method on the vehicles object.
//Is it because I have declared vehicles as Fleet class? If so then how to rectify this issue?
}
}
以下是我的示例 JSON 文件:
{
"vehicles":[
{
"car":{
"make":"Mercedes-Benz","model":"S500","seatingCapacity":5,"topSpeed":250.0
},"truck":{
"make":"Isuzu","model":"NQR","payloadCapacity":7500.0
}
}
]
}
这里的一切都按预期工作,但是当我尝试从 Car
类获取值时,我发现 MainClass 中的 vehicles
对象上没有任何 getmethod 可用。是不是因为我已经将 Fleet
声明为 Vehicle
类型并且没有来自 Car
类的对象?
如果是这样,如何使用 get
对象上的 vehicles
方法纠正问题并获取反序列化的对象?
我能够获取 Make
和 Model
get 方法,因为它们存在于 Vehicle 类中。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)