以下列(简化)格式给出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
类来执行反序列化。如果我将<outer>
从xml字符串中删除,显然它可以正常工作。
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
中的所有字段都为空。
我尝试使用Inner
注释@JacksonXmlRootElement(localName = "inner")
类,但这并没有改变输出。
我可以创建一个代表<outer>
元素的类,但这似乎很浪费。我可能还可以创建一个新的字符串,其中只包含<inner>
元素之间的xml,但这又感觉有点hacky。
在我的情况下,xml是由我无法控制的单独系统广播的,所以我可以简单地修改xml结构。
是否可以将“内部”xml反序列化为新的类实例?
答案 0 :(得分:1)
似乎@JacksonXmlRootElement(localName = "inner")
按预期工作,您还需要UNWRAP_ROOT_VALUE。 E.g。
xmlMapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
我不能说上述内容在文档中非常明显。