【问题标题】:FasterXML/jackson-dataformat-xml deserialize mixed ordered tagFasterXML/jackson-dataformat-xml 反序列化混合有序标签
【发布时间】:2015-05-19 04:30:16
【问题描述】:

我有来自客户的 xml:

<a>
   <b id="id1"/>
   <any-tag/>
   <b id="id2"/>
</a>

还有简单的Java类

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.ToString;

import java.util.List;

@ToString
public class A {

    @ToString
    public static class B {
        public String id;
    }


    @JacksonXmlProperty(localName = "b")
    @JacksonXmlElementWrapper(useWrapping = false)
    public List<B> bList;
}

当杰克逊完成解析后,我得到了结果

A(bList=[A.B(id=id2)])

很明显,我只得到了第二个标签,但预计 bList 中有 2 个标签。我意识到这是因为 any-tag 标签位于第一个和第二个标签 B 之间。

如何读取列表中的所有 B 标签? PS Tag A 包含其他应阅读的内容。

我正在使用:

'com.fasterxml.jackson.core:jackson-databind:2.5.1',
'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.5.1',
'org.codehaus.woodstox:woodstox-core-asl:4.1.4',

【问题讨论】:

    标签: java xml jackson


    【解决方案1】:

    从 2.9 版本开始,引入了 @JsonMerge 注解。 以下将节点 b 的每次出现聚合到 bList 中:

    @JacksonXmlProperty(localName = "b") 
    @JsonMerge() 
    public List<B> bList;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-11
      • 2023-04-02
      • 2016-03-02
      • 2017-01-10
      • 2017-10-24
      • 1970-01-01
      • 2017-09-17
      • 2013-09-16
      相关资源
      最近更新 更多