您可以执行以下操作:
笔记
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement
@XmlType(propOrder={"to", "from", "header", "body", "assignee"})
public class Note {
private String to;
private String from;
private String header;
private String body;
private Assignee assignee;
@XmlElement(nillable=true)
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
@XmlElement(nillable=true)
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
@XmlElement(nillable=true)
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
@XmlElement(nillable=true)
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public Assignee getAssignee() {
return assignee;
}
public void setAssignee(Assignee assignee) {
this.assignee = assignee;
}
}
受让人
当未编组的 Assignee 实例应被解释为 null 时,我们将需要有一种方法来拒绝。我添加了一个 isNull() 方法,如果所有字段都为空,则该方法返回 true。
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlJavaTypeAdapter(AssigneeAdapter.class)
public class Assignee {
private String name;
private String surname;
@XmlElement(nillable=true)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(nillable=true)
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public boolean isNull() {
return null == name && null == surname;
}
}
受让人适配器
AssigneeAdapter 将 Assignee 对象用于值类型和绑定类型。这个类利用了我们在 Assignee 上添加的 isNull() 方法:
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class AssigneeAdapter extends XmlAdapter<Assignee, Assignee> {
@Override
public Assignee unmarshal(Assignee v) throws Exception {
if(v.isNull()) {
return null;
}
return v;
}
@Override
public Assignee marshal(Assignee v) throws Exception {
if(null == v) {
return new Assignee();
}
return v;
}
}
演示
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Note.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(new Note(), System.out);
}
}
有关 XmlAdapter 的更多信息,请参见: