Da XML in den folgenden (vereinfacht) Format:Deserialize inneren Teil von XML in neue Klasseninstanz
<outer><inner><field1>a</field1><field2>b</field2><field3>c</field3></inner></outer>
Ich möchte das <inner>
Element in eine Klasse deserialisieren dass darstellt und den Rest zu verwerfen.
public class Inner {
private String field1;
private String field2;
private String field3;
// getters, setters, ctor
}
Ich bin mit dem Jackson XmlMapper
Klasse die Deserialisierung auszuführen. Wenn ich <outer>
aus der XML-Zeichenfolge streife, funktioniert es offensichtlich.
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)
Wenn ich verlassen das <outer>
Element alle Felder in inner
null sind.
Ich habe versucht, die Inner
Klasse mit @JacksonXmlRootElement(localName = "inner")
annotieren, aber das hat die Ausgabe nicht geändert.
Ich könnte eine Klasse erstellen, die das <outer>
Element darstellt, aber das scheint verschwenderisch. Ich könnte wahrscheinlich auch eine neue Zeichenfolge erstellen, die nur die Xml zwischen den <inner>
Elemente enthält, aber auch das fühlt sich ein bisschen hacky.
In meinem Fall wird die XML von einem separaten System gesendet, das ich nicht kontrollieren kann, also kann ich einfach die XML-Struktur ändern.
Ist es möglich, das "innere" XML in eine neue Klasseninstanz zu deserialisieren?
Danke. Es scheint, dass Feature der Schlüssel war. –