如何跳过字段并仅使用JAXB解组该字段的特定成员?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何跳过字段并仅使用JAXB解组该字段的特定成员?相关的知识,希望对你有一定的参考价值。

我需要解组为我创建模型的XML文件。在XML文件中,我有一个元素名称,在我的模型中是Person类型字段的成员。我想要做的是将“name”元素解组为person.name,但问题是在XML文件中没有Person的节点,它右转到“name”。是否可以通过JAXB实现这一目标?

这是XML文件的简化版本:

<root>
    <id>1</id>
    <name>Jack</name>
</root>

这些是我试图将XML解组为的模型:

@XmlRootElement (name = "root")
public class Container{
    @XmlElement
    int id;

    //how should I annotate this?
    Person person;
}
public class Person{
    int age;

    //and how should I annotate this one?
    String name;
}

我期待发生的事情:我有一个容器,container.person.name.equals("Jack") && container.id == 1

我试图在personPerson.name(尝试所有组合)中设置XmlElement无济于事。

使用这种方法(不包括XML中的人)的关键是我真实代码中的这个“名称”是一个表达式,我需要处理它并将值分配给人的不同字段。

答案

要进行此特定映射,请添加name getter并使用@XmlElement对其进行注释。 这个想法是使用name中定义的Container getter和setter来允许JAXB依赖于Person字段,因为它会对root元素进行编组或解组。

仅允许解组:

@XmlElement
public void setName(String name) {
    if (person == null){
       person = new Person();
    }
    person.setName(name);
}

允许编组和解组:

@XmlElement
public String getName() {
     return person.getName();
}

public void setName(String name) {
    if (person == null){
       person = new Person();
    }
    person.setName(name);
}

以上是关于如何跳过字段并仅使用JAXB解组该字段的特定成员?的主要内容,如果未能解决你的问题,请参考以下文章

Java/JAXB:根据属性将 Xml 解组为特定子类

JAXB 继承,解组到编组类的子类

使用 Xpath 表达式和 jaxb 解组 XML

解组忽略空字段

如何调试 JAXB 解组?

如果命名空间声明在 SOAP 信封上,如何使用 JAXB 解组 SOAP 响应?