首页 > 解决方案 > Jackson XmlMapper:自定义反序列化器 XML 子节点结构为字符串

问题描述

我想在 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”的原始值,那将有很大帮助。

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

标签: javajacksonjackson-databindjackson-dataformat-xml

解决方案


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

xmlMapper.writeValueAsString(jsonNode);

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

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


推荐阅读