Maison  >  Article  >  développement back-end  >  Un outil puissant pour convertir JAVAbean et XML - Explication détaillée du code de XStream

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

黄舟
黄舟original
2017-03-31 14:01:491540parcourir

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;  
    }  
}

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));

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>
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;  
    }  
}

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));

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>
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;  
    }  
}

Liste de traitement

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


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;  
    }  
}

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 4e4533e6d53566a86c3dd22301ca0fe8 et de modification de "98c455a79ddfebb79781bff588e7b37e".

<person age="18">  
  <name>pli</name>  
  <girlFriends>  
    <string>YuanYuanGao</string>  
    <string>QiShu</string>  
    <string>BoZhiZhang</string>  
  </girlFriends>  
</person>

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;  
    }  
}

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>
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;  
    }  
}

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!

Déclaration:
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