在编组期间将属性放在运行时
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 之外,根据情况可以有很多元素。
现在,我应该如何以及如何获取 FIRSTNAME 的 ID 属性。我需要在其中声明 ID 属性 或其他可以帮助我获得所需内容的东西。
您可以使用 @XmlAttribute
。
您打算自动生成 ID 吗?
示例:
@XmlAttribute(name="ID")
private String id;
在使用 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 之外,根据情况可以有很多元素。 现在,我应该如何以及如何获取 FIRSTNAME 的 ID 属性。我需要在其中声明 ID 属性 或其他可以帮助我获得所需内容的东西。
您可以使用 @XmlAttribute
。
您打算自动生成 ID 吗?
示例:
@XmlAttribute(name="ID")
private String id;