2

我正在尝试从服务中读取 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 来获得它,这是正确的,我只是不知道如何获得该标题值。

4

2 回答 2

3

这对我来说是一个独立的 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]'

手指交叉它也适合你!

于 2012-10-08T09:40:21.287 回答
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(""));
    }
}
于 2013-01-31T17:00:49.690 回答