希望这不是一个菜鸟问题。我正在尝试从 XML 的第二级将 XML 反序列化为 POJO,但是在搜索并尝试了许多与此类似的其他问题的答案之后,我仍在努力寻找适合该级别的东西。
XML(已提供但我无法更改)与此类似
<?xml version="1.0" encoding="UTF-8"?>
<ns0:InputRequest xmlns:ns0="OW">
<ns0:FMan>
<ns0:CInc>
<ns0:Act>Sample</ns0:Act>
<ns0:Op>Sample</ns0:Op>
<ns0:Int>AppInt</ns0:Int>
</ns0:CInc>
</ns0:FMan>
</ns0:InputRequest>
我只需要将 CInc(永远只有一个)反序列化到我的 POJO 中,它看起来类似于
public class CInc extends InputRequest {
@JacksonXmlProperty(namespace = "ns0", localName = "Act")
private String action;
@JacksonXmlProperty(namespace = "ns0", localName = "Op")
private String operation;
@JacksonXmlProperty(namespace = "ns0", localName = "Int")
private String intName;
// Usual Getters, Setters, etc
}
我正在扩展一个抽象的顶级类,如下
@JacksonXmlRootElement(namespace = "ns0", localName = "InputRequest")
public class InputRequest { }
我的 Java 代码看起来类似于
XmlMapper xmlMapper = new XmlMapper();
CInc cInc = xmlMapper.readValue(content, CInc.class);
由于缺少 FMan 元素,此操作失败。
从另一个答案中,我尝试像这样禁用 FAIL_ON_UNKNOWN_PROPERTIES
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
CInc cInc = xmlMapper.readValue(content, CInc.class);
这消除了失败,但 POJO 中的所有值都是空的。
我还尝试为扩展“InputRequest”的“FMan”元素放置另一个抽象类,然后将 CInc 更改为扩展 FMan,即
public class FMan extends InputRequest {
...
和
public class CInc extends FMan {
...
但这根本没有帮助。我觉得答案是我想念的愚蠢的东西,但我真的很难得到答案,所以任何帮助将不胜感激。