Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java xml注释,可以停止将属性转换为xml字符串_Java_Xml_Annotations - Fatal编程技术网

Java xml注释,可以停止将属性转换为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;

我在一个类中有一个属性“abc”。我想将此属性限制为转换为XML字符串格式。
是否有任何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>

酒吧
了解更多信息


在使用实现处理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>

酒吧
了解更多信息


能否请您详细描述一下,这将做什么以及如何使用它?它将告诉JaxB或您正在使用的任何实现在转换Java时跳过该属性