gpt4 book ai didi

java - 选择性编码对象

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:55 24 4
gpt4 key购买 nike

我需要执行选择性编码对象。例如:

有一个类联系方式:

@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 将使用所有公共(public)成员,即所有 getter 方法。

您可以保留默认值并禁止您不需要的 getter 方法,也可以更改默认值并显式标记您确实想要处理的 getter 方法。

要抑制 getter 方法,请使用 @XmlTransient 进行注释:

Prevents the mapping of a JavaBean property/type to XML representation.

要更改默认值,请使用 @XmlAccessorType(XmlAccessType.NONE) 进行注释:

None of the fields or properties is bound to XML unless they are specifically annotated with some of the JAXB annotations.

然后使用 @XmlElement 显式注释所需的 getter 方法:

Maps a JavaBean property to a XML element derived from property name.

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

关于java - 选择性编码对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49098879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com