用来记录一些原创性的总结
@XmlElement用来把一个属性与XML的一个元素进行绑定,默认绑定的元素名称是对应的属性名称或者通过get/set方法解析出来的属性名。通常我们的一个对象的属性不加@XmlElement注解,其也会与XML的一个元素绑定,但是使用XmlElement注解后,我们可以通过它来指定绑定元素的名称。
@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 {
private Integer id;
@XmlElement(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类的id属性会自动的生成XML的id元素,而username属性会自动的生成XML的name元素,因为我们使用了@XmlElement注解,并通过其name属性指定了生成的XML的元素名称为name。所以生成的XML会是如下这样:
<user>
<id>1</id>
<name>张三</name>
</user>
如果有需要我们还可以配置namespace属性来指定生成的XML元素关联的namespace。如我们把User在username上指定了namespace属性。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public static class User {
private Integer id;
@XmlElement(name="name", namespace="http://jaxb.elim.com")
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;
}
}
然后生成出来的XML中name元素就是由namespace “http://jaxb.elim.com”来关联的。
<user xmlns:ns2="http://jaxb.elim.com">
<id>1</id>
<ns2:name>张三</ns2:name>
</user>
除了name和namespace外,@XmlElement也还可以指定其它一些属性,但是其它属性都是与生成schema文件相关的,如有需要请参考API文档。
(注:本文由Elim写于2017年8月10日)