Java xml注释,可以停止将属性转换为xml字符串
我在一个类中有一个属性“abc”。我想将此属性限制为转换为XML字符串格式。Java xml注释,可以停止将属性转换为xml字符串,java,xml,annotations,Java,Xml,Annotations,我在一个类中有一个属性“abc”。我想将此属性限制为转换为XML字符串格式。 是否有任何XMl注释可用于属性,以避免将其转换为XMl字符串 有人请帮我一下。你在找吗?你在找吗?@xmltransive防止属性转换为xml@xmltransive防止属性转换为xml你可以使用@xmltransive注释。 有关更多信息,请访问 下面是在JAXB中避免XML转换中使用“password”属性的示例。因此,使用 @XmlTransient注释 import java.util.List;
是否有任何XMl注释可用于属性,以避免将其转换为XMl字符串
有人请帮我一下。你在找吗?你在找吗?@xmltransive防止属性转换为xml@xmltransive防止属性转换为xml你可以使用@xmltransive注释。
有关更多信息,请访问
下面是在JAXB中避免XML转换中使用“password”属性的示例。因此,使用
@XmlTransient注释
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlType(propOrder = { "phoneNumbers", "name"})
public class Customer extends Person {
private String password;
private List<String> phoneNumbers;
@XmlTransient
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@XmlElement(name = "phone-number")
public List<String> getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(List<String> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
}
/* demo class*/
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("input.xml");
Customer customer = (Customer) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(customer, System.out);
}
}
/*Generated xml doesn't have password tag */
/* <?xml version="1.0" encoding="UTF-8"?>
<customer>
<id>123</id>
<phone-number>555-1111</phone-number>
<phone-number>555-2222</phone-number>
<name>Jane Doe</name>
</customer>
*/
import java.util.List;
导入javax.xml.bind.annotation.*;
@XmlRootElement
@XmlType(propoder={“phoneNumbers”,“name”})
公共类客户扩展人员{
私有字符串密码;
私人电话号码列表;
@XmlTransient
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
@xmlement(name=“电话号码”)
公共列表GetPhoneNumber(){
返回电话号码;
}
公用无效设置电话号码(列出电话号码){
this.phoneNumbers=电话号码;
}
}
/*演示类*/
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Customer.class);
Unmarshaller Unmarshaller=jc.createUnmarshaller();
File xml=新文件(“input.xml”);
Customer=(Customer)unmarshaller.unmarshal(xml);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
marshaller.marshall(客户、系统、输出);
}
}
/*生成的xml没有密码标记*/
/*
123
555-1111
555-2222
无名氏
*/
您可以使用@XmlTransient注释。有关更多信息,请访问
下面是在JAXB中避免XML转换中使用“password”属性的示例。因此,使用
@XmlTransient注释
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlType(propOrder = { "phoneNumbers", "name"})
public class Customer extends Person {
private String password;
private List<String> phoneNumbers;
@XmlTransient
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@XmlElement(name = "phone-number")
public List<String> getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(List<String> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
}
/* demo class*/
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("input.xml");
Customer customer = (Customer) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(customer, System.out);
}
}
/*Generated xml doesn't have password tag */
/* <?xml version="1.0" encoding="UTF-8"?>
<customer>
<id>123</id>
<phone-number>555-1111</phone-number>
<phone-number>555-2222</phone-number>
<name>Jane Doe</name>
</customer>
*/
import java.util.List;
导入javax.xml.bind.annotation.*;
@XmlRootElement
@XmlType(propoder={“phoneNumbers”,“name”})
公共类客户扩展人员{
私有字符串密码;
私人电话号码列表;
@XmlTransient
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
@xmlement(name=“电话号码”)
公共列表GetPhoneNumber(){
返回电话号码;
}
公用无效设置电话号码(列出电话号码){
this.phoneNumbers=电话号码;
}
}
/*演示类*/
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Customer.class);
Unmarshaller Unmarshaller=jc.createUnmarshaller();
File xml=新文件(“input.xml”);
Customer=(Customer)unmarshaller.unmarshal(xml);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
marshaller.marshall(客户、系统、输出);
}
}
/*生成的xml没有密码标记*/
/*
123
555-1111
555-2222
无名氏
*/
当使用实现处理XML时,排除属性时,您有几个选项
选项#1-@xmltransive
排除字段/属性的最常见方法是使用@xmltransive
对其进行注释
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlTransient
private String foo;
private String bar;
public void setFoo(String foo) {
this.foo = foo;
}
public void setBar(String bar) {
this.bar = bar;
}
}
选项2-@xmlacessortype(xmlacesstype.NONE)
如果要排除一半以上的属性,我建议在类上设置@xmlacessortype(xmlacesstype.NONE)
。然后,将只映射带注释的字段/属性。在下面的示例中,我们不必排除foo,但必须特别包括bar
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Root {
private String foo;
@XmlElement
private String bar;
public void setFoo(String foo) {
this.foo = foo;
}
public void setBar(String bar) {
this.bar = bar;
}
}
选项#3-瞬态
如果您使用的是字段访问,那么您也可以简单地将字段标记为瞬态以排除它
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
private transient String foo;
private String bar;
public void setFoo(String foo) {
this.foo = foo;
}
public void setBar(String bar) {
this.bar = bar;
}
}
演示 无论您选择哪个选项,都可以使用以下演示代码
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Root root = new Root();
root.setFoo("FOO");
root.setBar("BAR");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
输出
在输出中,我们看到foo
元素被排除在输出之外
<?xml version="1.0" encoding="UTF-8"?>
<root>
<bar>BAR</bar>
</root>
酒吧
了解更多信息
@xmltransive
排除字段/属性的最常见方法是使用@xmltransive
对其进行注释
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlTransient
private String foo;
private String bar;
public void setFoo(String foo) {
this.foo = foo;
}
public void setBar(String bar) {
this.bar = bar;
}
}
选项2-@xmlacessortype(xmlacesstype.NONE)
如果要排除一半以上的属性,我建议在类上设置@xmlacessortype(xmlacesstype.NONE)
。然后,将只映射带注释的字段/属性。在下面的示例中,我们不必排除foo,但必须特别包括bar
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Root {
private String foo;
@XmlElement
private String bar;
public void setFoo(String foo) {
this.foo = foo;
}
public void setBar(String bar) {
this.bar = bar;
}
}
选项#3-瞬态
如果您使用的是字段访问,那么您也可以简单地将字段标记为瞬态以排除它
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
private transient String foo;
private String bar;
public void setFoo(String foo) {
this.foo = foo;
}
public void setBar(String bar) {
this.bar = bar;
}
}
演示 无论您选择哪个选项,都可以使用以下演示代码
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Root root = new Root();
root.setFoo("FOO");
root.setBar("BAR");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
输出
在输出中,我们看到foo
元素被排除在输出之外
<?xml version="1.0" encoding="UTF-8"?>
<root>
<bar>BAR</bar>
</root>
酒吧
了解更多信息