【问题标题】:How to get nested elements with JacksonXmlRootElement?如何使用 JacksonXmlRootElement 获取嵌套元素?
【发布时间】:2022-07-15 17:14:06
【问题描述】:

我正在使用 Java/Spring

我有这样的 XML:

 <Transfer> 
 <Data>
     ... 
 </Data>
 <Transfer>

我只需要访问我的模型的 XML 元素“数据”,例如: @JacksonXmlRootElement (localName = "Data")

是否可以不用额外的包装类?

【问题讨论】:

    标签: java xml spring api jackson


    【解决方案1】:

    是否可以不用额外的包装类?

    是的,如果您阅读您感兴趣的 xml 标签,XMLStreamReader 类直接指向相关标签,请注意您必须手动将 XMLStreamReader 阅读器放置到正确的标签:

    //the simplest class, the classname is the same of the <Data> tag so no need for
    //@JacksonXmlRootElement (localName = "Data")
    public class Data {}
    
    XMLInputFactory f = XMLInputFactory.newFactory();
    XMLStreamReader sr = f.createXMLStreamReader(new FileInputStream(xml));
    XmlMapper mapper = new XmlMapper();
    sr.nextTag();
    sr.nextTag(); //<-- pointing the <Data> tag
    Data data = mapper.readValue(sr, Data.class);
    sr.close();
    

    【讨论】:

      【解决方案2】:

      友情提醒大家:不要把JAXB和JacksonXML混为一谈,我所有的问题都是从那里来的。

      所以,只需添加一个额外的模型,如下面的代码:

      @Data
      @JacksonXmlRootElement(localName = "Transfer")
      public class WrapperClass{
      
         @JacksonXmlProperty(localName="Data")
         public MyClass myClas;
      
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-04
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        • 2022-07-22
        • 2016-04-25
        • 2018-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多