我需要执行一个选择性编组对象。例如:
有一个课程联系:
@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>
谢谢!
答案 0 :(得分:0)
如果未指定,则默认为 - 如果类上有以下注释:
@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>