选择性编组对象

问题描述 投票:1回答:1

我需要执行一个选择性的编组对象。例如:

有课程联系方式:

@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>

谢谢!

java xml jaxb
1个回答
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>
© www.soinside.com 2019 - 2024. All rights reserved.