【问题标题】:Jackson XmlMapper: Custom Deserializer XML child node structure as stringJackson XmlMapper:自定义反序列化器 XML 子节点结构为字符串
【发布时间】:2018-12-27 19:11:25
【问题描述】:

我想在 JAVA 中将 XML 子树反序列化为字符串(使用 Jackson):

输入结构:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <nodeA>text</nodeA>
  <nodeB>
    <nodeS>
      <nodeS1>...</nodeS1>
      <nodeS2>...</nodeS2>
    </nodeS>
  </nodeB>
</root>

变成这样的:

public class Pojo {
  @JacksonXmlProperty(localName="nodeA")
  private String nodeA; // = "text"
  @JacksonXmlProperty(localName="nodeB")
  @JsonDeserialize(using = MyXmlDeserializer.class)
  private String nodeB; // = "<nodeS><nodeS1>...</nodeS1><nodeS2>...</nodeS2></nodeS>"
}

节点 nodeS 应被视为“原始值”,无需对 xml 进行任何修改,并将其放入 String 类成员中。 我用自定义反序列化器或@JacksonRawValue 尝试过,但无济于事。

如果可以访问“currentNode”的原始值,那将有很大帮助。

欢迎任何替代(杰克逊相关)解决方案:-)

【问题讨论】:

  • 您为什么认为 JSON 反序列化器会对解析 XML 产生任何影响?
  • @Andreas:我正在使用 XmlMapper (jackson-dataformat-xml)

标签: java jackson jackson-databind jackson-dataformat-xml


【解决方案1】:

这是一种解决方法而不是解决方案,但可以在 JsonDeserializer 中使用 XmlMapper:

xmlMapper.writeValueAsString(jsonNode);

因此,您将再次获得 Xml 字符串。但正如我所写,这是一种解决方法,我不喜欢它从 Xml 到 Json,再从 Json 到 Xml。

如果有人得到更好的解决方案(使用 Jackson),请分享。

【讨论】:

    猜你喜欢
    • 2016-02-12
    • 2014-10-22
    • 1970-01-01
    • 2013-06-17
    • 2016-05-27
    • 2023-03-22
    • 2016-02-13
    • 2011-04-12
    • 2020-05-27
    相关资源
    最近更新 更多