用来记录一些原创性的总结
@XmlAttribute也是JAXB中比较基础的一个注解。@XmlElement用于把对应的一个属性映射为它对应XML的一个子元素,而@XmlAttribute可以把对应的一个属性映射为它对应XML元素的一个属性。
注意,只有基本类型的属性才能使用@XmlAttribute,复杂类型的属性如果定义了XmlID,也可以通过ID关联到属性上。
下面来看一个简单的示例。
@Test
public void test() {
User user = new User();
user.setId(1);
user.setUsername("张三");
JAXB.marshal(user, System.out);
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public static class User {
@XmlAttribute
private Integer id;
@XmlAttribute(name="name")
private String username;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
在上面的示例中我们把User对象的两个属性都定义为了关联对应XML元素的属性,其中id没有指定关联的属性的名称,会默认使用Java属性名称,而username属性上的@XmlAttribute通过name指定了关联的属性名称为name。所以测试生成的XML效果将如下所示:
<user id="1" name="张三"/>
(注:本文由Elim写于2017年8月10日)