【问题标题】:Jackson XML Parsing杰克逊 XML 解析
【发布时间】:2014-06-17 04:20:42
【问题描述】:

杰克逊 2.2.3

首先,请原谅愚蠢的错误,我的网络断开了,所以我不得不手动重新输入)

我有以下 XML:

<orgs>
    <org name="Test1">
        <item>a</item>
        <item>b</item>
    </org>
    <org name="Test2">
        <item>c</item>
        <item>d</item>
        <item>e</item>
    </org>
</orgs>

我有以下类来解析这个:

@XmlRootElement(name = "orgs")
@XmlAccessorType(XmlAccessType.FIELD)
public class XmlOrgElements {

    private List<Org> orgs;

    public List<Org> getOrgs() {
        return orgs;
    }

    public void setOrg(List<Org> orgs) {
        this.orgs = orgs;
    }

    public class Org {
        @JacksonXmlProperty(isAttribute = true)
        private String name;
        private List<Item> items;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public List<Item> getItems() {
            return items;
        }

        public void setName(List<Item> items) {
            this.items = items;
        }
    }

    public class Item {
        @JacksonXmlText
        private String item;

        public String getItem() {
            return item;
        }

        public void setItem(String item) {
            this.item = item;
        }
    }
}

但我得到的只是“orgs=null”。有谁知道为什么?

【问题讨论】:

  • 如果有帮助,我的最终愿望是 Map>

标签: java xml jackson


【解决方案1】:

您需要为列表启用展开处理;默认是使用“包装”格式。诊断此问题的最佳方法是从 Java 对象开始,序列化为 XML,然后查看输出格式是什么。 这可以让您了解结构的不同之处。

如果你想默认为展开样式,你可以使用:

JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);
mapper.registerModule(module);

还有一个注解@JacksonXmlElementWrapper

public class Bean {
  @JacksonXmlElementWrapper(useWrapping=false)
  public List<Stuff> entry;
}

根据每个列表属性更改行为。

【讨论】:

  • 我都做了,但仍然得到“orgs = null”
  • 你赢了!您从 Java 对象开始并序列化为 XML 的建议是最简单的!谢谢!
  • 很高兴它成功了!我发现在出现问题时至少进行健全性检查是最容易的。
【解决方案2】:

以下是阅读者的答案:

@JacksonXmlRootElement(localname = "orgs")
public class Orgs {
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<Org> org;

    public List<Org> getOrg() {
        return org;
    }

    public void setOrg(List<Org> org) {
        this.orgs = org;
    }

    public Orgs() {}
}


public class Org {
    @JacksonXmlProperty(isAttribute = true)
    private String name;
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<String> item;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<String> getItem() {
        return item;
    }

    public void setItem(List<String> item) {
        this.item = item;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2019-07-27
    • 2014-08-22
    • 2019-11-25
    • 1970-01-01
    • 2019-02-06
    • 2012-09-11
    相关资源
    最近更新 更多