【问题标题】:Jackson XmlMapper Converting XML to POJO, node text's key is ""Jackson XmlMapper 将 XML 转换为 POJO,节点文本的键是“”
【发布时间】:2012-09-28 07:46:12
【问题描述】:

我正在尝试从服务中读取 XML 数据(我无法更改数据),但 Jackson XmlMapper 出现问题。如果我有这样的 XML:

<entry>
   <title type="text">W411638</title>
</entry>

它给了我以下地图:

title: ["": "W411638", "type": text]

我正在尝试使用以下代码将其变成一个对象:

XmlMapper xmlMapper = new XmlMapper()
Entry entry = xmlMapper.readValue(xmlData, Entry.class)

而我的入门类是这样的:

class Entry {
    static class Title {
        //String __;  //-- This is what I can't figure out --
        String type; 
    }

    Title title;
}

问题是我找不到将标题文本(“W411638”)放入条目对象的任何方法。类型很好,我可以通过 entry.title.type 来获得它,这是正确的,我只是不知道如何获得该标题值。

【问题讨论】:

    标签: java xml groovy jackson pojo


    【解决方案1】:

    这对我来说是一个独立的 Groovy 脚本...

    @Grab( 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.0.5' )
    import com.fasterxml.jackson.dataformat.xml.XmlMapper
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText
    
    class Entry {
      static class Title {
        public String type
    
        @JacksonXmlText
        public String value
    
        public String toString() {
          "$type -> $value"
        }
      }
    
      public Title title
    
      public String toString() {
        "Entry [$title]"
      }
    }
    
    def xml = '''<entry>
                |    <title type="text">W411638</title>
                |</entry>'''.stripMargin()
    
    def xmlMapper = new XmlMapper()
    Entry pojo = xmlMapper.readValue( xml, Entry )
    
    println pojo // prints 'Entry [text -> W411638]'
    

    祈祷它也适合你!

    【讨论】:

      【解决方案2】:

      我因此能够使用@JSONCreator 解决这个问题;

      xml

      <x>
          <a b="c" d="e">CDATA Text</a>
      </x>
      

      X.java

      public class A
      {
          private B b;
          private D d;
          private String cdata;
      
          @JsonCreator
          public PropertyDef(Map<String,Object> props)
          {
              setB((String) props.get("b"));
              setD((String) props.get("d"));
              setCdata((String) props.get(""));
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-03-15
        • 2014-10-22
        • 2022-07-24
        • 2014-01-31
        • 2019-06-24
        • 1970-01-01
        • 1970-01-01
        • 2018-08-04
        • 1970-01-01
        相关资源
        最近更新 更多