在编组期间将属性放在运行时

put attribute at runtime during marshalling

在使用 JAXB 对现有 POJO 对象进行 XML 转换后,我得到 XML 作为:

<USER>
    <FIELDNAME>FirstName</FIELDNAME>
    <FIELDVALUE>Michael</FIELDVALUE>
    <FIELDID>001</FIELDID>
</USER>

但是,根据要求,它必须是这样的:

<USER>
    <FIRSTNAME ID="001">Michael</FIRSTNAME>
</USER>

因此我将 POJO 修改为:

User.java

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlRootElement(name="USER")
    public class User 
    {
        @XmlVariableNode("fieldName")
        List<Field> field;
        //   getter/setter
    }

Field.java

    @XmlAccessorType(XmlAccessType.FIELD)
    public class Field 
    {
        @XmlTransient
        public String fieldName;
        @XmlValue
        public String fieldValue;
        //   getter/setter
    }

并得到 XML 有点预期(如下所示)但不完全是:

<USER>
    <FIRSTNAME>Michael</FIRSTNAME>
</USER>

我知道上面提到的场景太简单了,但是除了 FIRSTNAME 之外,根据情况可以有很多元素。 现在,我应该如何以及如何获取 FIRSTNAMEID 属性。我需要在其中声明 ID 属性 或其他可以帮助我获得所需内容的东西。

您可以使用 @XmlAttribute。 您打算自动生成 ID 吗?

示例:

@XmlAttribute(name="ID")
private String id;