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 Script として機能します...

@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 に答える