使用 Jackson 对 XML 进行多态反序列化

问题描述

我有一个可以以两种方式之一出现的 XML 结构(示例仅用于解释):

<User>
<Adress>Example Adress</Adress>
<Car>
<CarModel>Example car model</CarModel>
</Car>
</User>

<User>
<Adress>Example Adress</Adress>
<Motorcycle>
<MotorcycleModel>Example motorcycle model</MotorcycleModel>
</Motorcycle>
</User>

这就是我对类进行注释以尝试允许多态反序列化的方式:

public class User {
    
    @JsonProperty("Address")
    public String address;

    public Vehicle vehicle;
}

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.PROPERTY,property = "type")
@JsonSubTypes({
  @JsonSubTypes.Type(value=Car.class,name="Car"),@JsonSubTypes.Type(value=Motorcycle.class,name="Motorcycle")
})
public interface Vehicle {
    
}

public class Car implements Vehicle {
    
    @JsonProperty("CarModel")
    public String carModel;
}

public class Motorcycle implements Vehicle {
    
    @JsonProperty("MotorcycleModel")
    public String motorcycleModel;
}

但是,当我使用 xmlMapper.readValue(xmlString,User.class) 反序列化 XML 字符串时,从 User 对象生成的 Vehicle 在转换为汽车或摩托车时为空。我应该如何注释类以允许在此示例中进行多态反序列化?

解决方法

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

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

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