用来记录一些原创性的总结
假设有如下这样一个User类。
public static class User {
private Integer id;
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绑定起来,且要求生成的XML保持如下结构。
<user id="1">张三</user>
对于id而言,很明显它被映射为XML元素的一个属性,这个在之前介绍的@XmlAttribute中已经介绍过了,只要在id属性上加上@XmlAttribute即可。那么username属性如何映射为user元素中间的值呢?在XML中元素中间的纯文本也算是一个节点,即文本节点。在JAXB中使用@XmlValue表示。所以我们的上述需求可以如下配置。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public static class User {
@XmlAttribute
private Integer id;
@XmlValue
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;
}
}
需要注意的是,在使用@XmlValue时,我们的元素只能有纯文本节点,不能再有其它的节点,但是可以有多个属性。
(注:本文由Elim写于2017年8月10日)