【问题标题】:Parse same XML tag to different java objects将相同的 XML 标记解析为不同的 java 对象
【发布时间】:2020-09-25 09:53:54
【问题描述】:

我正在尝试将下面的 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 对象结构。

【问题讨论】:

  • 在调试 XML/JSON 的 解析 时,将其翻转为 generate XML/JSON 总是更容易找到问题,因此您可以看到 POJO 属性如何映射到 XML/JSON。 --- 例如您将看到name 生成为ab XML 元素,而不是属性。这只是问题之一。

标签: java xml jackson


【解决方案1】:

你把@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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2015-11-17
    • 2012-02-11
    相关资源
    最近更新 更多