Un outil puissant pour convertir JAVAbean et XML - Explication détaillée du code de XStream

黄舟
Libérer: 2017-03-31 14:01:49
original
1637 Les gens l'ont consulté

XStream est un projet open source sous la célèbre pensée. Sa fonction principale est de fournir une conversion entre les beans Java et le texte XML. Il fournit également des beans JAVA et . La conversion entre JSON sort du cadre de cette discussion.
XSteam prend également en charge les annotations après JAVA1.5. Pour le moment, il vous suffit d'ajouter quelques annotations au JAVA BEAN. Bien entendu, si le bean JAVA n'est pas autorisé à être modifié, XStream fournit également une méthode d'enregistrement, qui est également très simple. Expliquons en détail à travers plusieurs aspects :
1. Conversion de base
2. Utiliser des alias
Traitement 4. >Type d'attribut ;
5. Les attributs ne participent pas à la conversion Conversion de base
Il s'agit d'un bean JAVA ordinaire :


Le code de conversion est le suivant. suit :

package xstreamTest;  
public class Person {  
    private String name;  
    private int age;  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
Copier après la connexion

Nous avons obtenu ce résultat :

XStream xstream = new XStream();  
Person person = new Person();  
person.setName("pli");  
person.setAge(18);  
System.out.println(xstream.toXML(person));
Copier après la connexion

Mais parfois la balise racine ne veut pas utiliser le chemin du package, comment faire, utilisez un alias

<xstreamTest.Person>  
  <name>pli</name>  
  <age>18</age>  
</xstreamTest.Person>
Copier après la connexion
2. Alias ​​​​

Jia Ding Nous espérons changer la balise d'élément inexplicable "xstreamTest.Person" en "person".


Le code d'exécution deviendra comme ceci :

package xstreamTest;  
@XStreamAlias("person")  
public class Person {  
    private String name;  
    private int age;  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
Copier après la connexion

Donc on obtient ce que l'on veut :

XStream xstream = new XStream();  
xstream.autodetectAnnotations(true);  
Person person = new Person();  
person.setName("pli");  
person.setAge(18);  
System.out.println(xstream.toXML(person));
Copier après la connexion

3. Attributs de traitement

Quoi. devriez-vous le faire si vous souhaitez utiliser l'attribut "age" dans le bean JAVA comme attribut de la balise person en XML.
<person>  
  <name>pli</name>  
  <age>18</age>  
</person>
Copier après la connexion
Voici une autre annotation : @XStreamAsAttribute, notre bean JAVA devient comme ceci :



Le résultat est comme ceci :

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
      
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
Copier après la connexion

Liste de traitement

Quoi. se produit s'il y a une liste dans le bean JAVA.
<person age="18">  
  <name>pli</name>  
</person>
Copier après la connexion


Conversion directe nous obtiendrons ce résultat :

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
      
    List<String> girlFriends;  
      
    public List<String> getGirlFriends() {  
        return girlFriends;  
    }  
  
    public void setGirlFriends(List<String> girlFriends) {  
        this.girlFriends = girlFriends;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
Copier après la connexion

XStream fournit ici une annotation @XStreamImplicit(itemFieldName=***) pour satisfaire l'utilisateur qui souhaite convertir List The besoin de supprimer le nœud racine et de changer le nom de la liste correspond à notre exemple de suppression de la balise et de modification de "".

<person age="18">  
  <name>pli</name>  
  <girlFriends>  
    <string>YuanYuanGao</string>  
    <string>QiShu</string>  
    <string>BoZhiZhang</string>  
  </girlFriends>  
</person>
Copier après la connexion

Le résultat est comme ceci :

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
    @XStreamImplicit(itemFieldName="girl")  
    List<String> girlFriends;  
      
    public List<String> getGirlFriends() {  
        return girlFriends;  
    }  
  
    public void setGirlFriends(List<String> girlFriends) {  
        this.girlFriends = girlFriends;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
Copier après la connexion

5. Ignorer les attributs

S'il y a certains attributs dans le bean JAVA que vous ne souhaitez pas sérialiser, XStream fournit une annotation pour résoudre cette exigence : @XStreamOmitField
<person age="18">  
  <name>pli</name>  
  <girl>YuanYuanGao</girl>  
  <girl>QiShu</girl>  
  <girl>BoZhiZhang</girl>  
</person>
Copier après la connexion
Par exemple, je ne veux pas parler de sérialisation de la liste des copines



@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
    @XStreamImplicit(itemFieldName="girl")  
    @XStreamOmitField  
    List<String> girlFriends;  
      
    public List<String> getGirlFriends() {  
        return girlFriends;  
    }  
  
    public void setGirlFriends(List<String> girlFriends) {  
        this.girlFriends = girlFriends;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal