Java-Jackson 反序列化后无法从 Car/Truck 类中获取值

问题描述

我可以使用 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 方法纠正问题并获取反序列化的对象?

我能够获取 MakeModel get 方法,因为它们存在于 Vehicle 类中。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)