繁体   English   中英

将相同的 XML 标签解析为不同的 java 对象

[英]Parse same XML tag to different java objects

我正在尝试将下面的 xml 解析为 java 对象

<MyCar>
    <Object name="Car's Front" type="CarFront">
        <Object name="Car's Bumper" type="Bumper"></Object>
        <Object name="Car's Headlight" type="Headlight"></Object>
        <Object name="Car's Windshield" type="Windshield"></Object>
    </Object>
</MyCar>

Java代码

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class MyCarParser {

    public static void main(String[] args) throws Exception {
        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.readValue(new File("car.xml"), MyCar.class);
    }
}

class MyCar {
    public String version;

    @JsonProperty("Object")
    public CarFront carFront; // This works
}

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "type")
abstract class CarObjects {
    public String name;
}

class CarFront extends CarObjects {

    // ???
    public Bumper bumper;
    public Headlight headlight;
    public Windshield windshield;
}

class Bumper extends CarObjects {}
class Headlight extends CarObjects {}
class Windshield extends CarObjects {}

关于我应该使用什么注释/扩展的任何建议,以便我可以正确地将此 XML 序列化/反序列化为我想要的 Java 对象结构。

您已将@JsonSubTypes添加到CarOjects

@JsonSubTypes({
  @JsonSubTypes.Type(value=Bumper.class, name = "Bumper"),
  @JsonSubTypes.Type(value=Headlight.class, name = "Headlight"),
// and so on ..
})
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "type")
abstract class CarObjects {
    public String name;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM