对象名称空间属性的Jackson XML反序列化


@JacksonXmlRootElement(localName = "model_trees")
public class ModelTrees {
@JacksonXmlProperty(isAttribute = true, localName = "xmlns")
private String some_text1;
@JacksonXmlProperty(localName = "tree_kind")
private String treeKind;
}
XML:
<model_trees xmlns="http://test.com/test1">
<tree_kind>kind</tree_kind>
</model_trees>

反序列化后:

XmlMapper xmlMapper = new XmlMapper();
ModelTrees modelTrees = xmlMapper.readValue(xml, ModelTrees.class);

我得到字段some_text1与空值。但是如果我替换掉"xmlns"带有属性"id"然后我得到我需要的值(http://test.com/test1)

如何反序列化"xmlns"名称空间属性使用XmlMapper?

如何反序列化"xmlns"名称空间属性使用XmlMapper?

这通常是不可能的,因为名称空间声明不是属性而是元数据,所以标准的XmlMapper映射器将它们忽略为属性。为了实现您的目标,您可以实例化一个新的映射器,关闭名称空间支持,这样名称空间将作为常规属性报告,因此您需要构造一个具有适当设置的新映射器,并传递一个XMLInputFactory工厂:

//instantiate a factory without namespace support
XMLInputFactory inputF = XMLInputFactory.newFactory();
inputF.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false);
//instantiate a mapper without namespace support
//then namespace will be reported as a regular attribute
XmlMapper xmlMapper = new XmlMapper(inputF);
ModelTrees modelTrees = mapper.readValue(xmlMapper, ModelTrees.class);

最新更新