:デシリアライズ内側部分は、以下の(簡略化)フォーマットでXMLを考える
<outer><inner><field1>a</field1><field2>b</field2><field3>c</field3></inner></outer>
私はそれを表すクラスに<inner>
要素をデシリアライズし、残りを廃棄したいです。
public class Inner {
private String field1;
private String field2;
private String field3;
// getters, setters, ctor
}
私は、デシリアライズを実行するためにJackson XmlMapper
クラスを使用しています。私がxml文字列の中で<outer>
を取り除いても、それは明らかに機能します。
XmlMapper xmlMapper = new XmlMapper();
// in my scenario the `<inner>` element actually contains fields I don't care about
xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Inner inner = xmlMapper.readValue(xml, Inner.class);
System.out.println(inner);
// Inner(field1=a, field2=b, field3=c)
私は<outer>
要素を残す場合inner
内のすべてのフィールドがnullです。
Inner
クラスに@JacksonXmlRootElement(localName = "inner")
と注釈を付けることを試みましたが、出力が変更されませんでした。
<outer>
要素を表すクラスを作成できましたが、それは無駄に思えます。私はおそらく<inner>
要素の間にxmlだけを含む新しい文字列を作成することもできますが、もう少しハッキリに感じます。
私の場合、xmlは別のシステムによってブロードキャストされています。私はコントロールがないので、xml構造を単純に修正できます。
"inner" xmlを新しいクラスインスタンスにデシリアライズすることはできますか?
ありがとうございました。それが特徴だったようです。 –