【问题标题】:deserialize xml polymorphic list with jackson用杰克逊反序列化xml多态列表
【发布时间】:2014-08-13 00:05:36
【问题描述】:

我在反序列化以下 xml 时遇到问题:

<root>
  <apples>
    <apple>
      <id>1</id>
      <weight>0.6</id>
    </apple>
    <apple>
      <id>2</id>
      <weight>0.7</id>
    </apple>
  </apples>
</root>

到java:

public class Root {
  private List<Fruits> fruits;
}

在上面的 xml 源代码中,其他变体可能是例如橘子/橙色等,因为这是属性 xml,我无法更改它的架构。默认情况下,我使用@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)@JsonSubTypes({/*fruits subtypes listed*/})。经过几次不成功的尝试后,我不确定解决问题的正确映射/配置是什么。

【问题讨论】:

    标签: java xml jackson


    【解决方案1】:

    开箱即用,JacksonJSON 解析器,而不是 XML

    Jackson 的扩展允许XML 转换。有关更多信息,请参阅http://wiki.fasterxml.com/JacksonExtensionXmlDataBinding。但似乎纯 XML 解析器可能更适合这种情况。

    也许是javax.xml.stream.* 包。

    http://www.javacodegeeks.com/2013/05/parsing-xml-using-dom-sax-and-stax-parser-in-java.html 了解更多信息。

    【讨论】:

    • 我知道有更好的 XML 映射解决方案。我正在考虑使用其中之一。但是我正在为几个休息服务编写集成(使用spring RestTemplate) - 其中大多数使用json,现在这只是第二种情况,消费休息的要求是XML(并且没有模式/DTD)。所以在我决定使用其他解决方案之前,我会尝试使用专用的解串器来解决这个问题。
    • 好的。我怀疑尝试将Jackson 用于XML 会更加复杂,但是如果您想继续使用Jackson,我在上面添加的XmlDataBinding 链接可能值得一试。我只想补充一点,因为它不支持开箱即用,所以使用 XmlDataBinding 之类的东西本质上也是另一种解决方案。
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2015-04-07
    • 1970-01-01
    • 2012-12-22
    相关资源
    最近更新 更多