Jackson XmlMapper:自定义反序列化XML子节点结构为字符串

时间:2018-07-19 15:10:29

标签: java jackson jackson-databind jackson-dataformat-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”的原始值,那将会有很大帮助。

欢迎使用任何其他(与杰克逊相关的)解决方案:-)

1 个答案:

答案 0 :(得分:0)

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

xmlMapper.writeValueAsString(jsonNode);

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

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