我需要执行一个选择性的编组对象。例如:
有一个班级联系方式:
@XmlRootElement(name = "contact")
public class Contact {
private String name;
private String number;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
编组对象:
public static void main(String[] args) throws JAXBException {
Contact contact = new Contact();
contact.setAddress("5 Av.");
contact.setName("John");
contact.setNumber("5555555");
JAXBContext context = JAXBContext.newInstance(Contact.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(contact, System.out);
}
结果,我们有:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contact>
<address>5 street</address>
<name>John</name>
<number>5555555</number>
</contact>
有什么简单的方法可以执行选择性编组吗?例如,只有要获取的地址:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contact>
<address>5 street</address>
</contact>
谢谢!
最佳答案
如果未指定,则默认值为-如果类上具有以下注释:
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
这意味着JAXB将使用所有公共成员,即您的所有getter方法。
您可以保留该默认值并取消不需要的getter方法,也可以更改默认值并显式标记要处理的getter方法。
要禁止使用getter方法,请使用
@XmlTransient
进行注释:防止将JavaBean属性/类型映射到XML表示形式。
要更改默认值,请使用
@XmlAccessorType(XmlAccessType.NONE)
进行注释:除非使用某些JAXB注释专门对其进行注释,否则没有任何字段或属性绑定到XML。
然后使用
@XmlElement
显式注释所需的getter方法:将JavaBean属性映射到从属性名称派生的XML元素。
使用
@XmlTransient
@XmlRootElement(name = "contact")
class Contact {
private String name;
private String number;
private String address;
@XmlTransient
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlTransient
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
使用
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "contact")
@XmlAccessorType(XmlAccessType.NONE)
class Contact {
private String name;
private String number;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@XmlElement
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
输出(从两者)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contact>
<address>5 Av.</address>
</contact>