Korisnički vodič za XStream: Pretvaranje XML-a u objekte

1. Pregled

U prethodnom članku naučili smo kako koristiti XStream za serializaciju Java objekata u XML. U ovom uputstvu naučit ćemo kako napraviti obrnuto: deserializirati XML na Java objekte. Te se zadatke može izvršiti pomoću bilješki ili programski.

Da biste saznali više o osnovnim zahtjevima za postavljanje XStreama i njegovim ovisnostima, pogledajte prethodni članak.

2. Deserijalizirajte objekt iz XML-a

Za početak pretpostavimo da imamo sljedeći XML:

 John Doe 1986-02-14 03: 46: 16.381 UTC 

Ovo moramo pretvoriti u Javu Kupac objekt:

kupac javne klase {private String firstName; private String lastName; privatno Datum dob; // standardni postavljači i dobivači} 

XML se može unijeti na više načina, uključujući Datoteka, InputStream, Čitač, ili Niz. Radi jednostavnosti pretpostavit ćemo da XML imamo gore u a Niz objekt.

Korisnik convertCustomer = (kupac) xstream.fromXML (customerXmlString); Assert.assertTrue (convertCustomer.getFirstName (). Jednako ("John"));

3. pseudonimi

U prvom primjeru, XML je imao potpuno kvalificirano ime klase u najudaljenijoj XML oznaci, što odgovara mjestu našeg Kupac razred. Ovom postavkom XStream lako pretvara XML u naš objekt bez ikakve dodatne konfiguracije. Ali možda nećemo uvijek imati te uvjete. Možda nemamo kontrolu nad imenovanjem XML oznaka ili bismo mogli odlučiti dodati pseudonime za polja.

Na primjer, pretpostavimo da smo izmijenili svoj XML tako da ne koristi potpuno kvalificirano ime klase za vanjsku oznaku:

 John Doe 1986-02-14 03: 46: 16.381 UTC 

Ovaj XML možemo prikriti stvaranjem aliasa.

3.1. Razredni pseudonimi

Pseudonime registriramo s instancom XStream bilo programski ili koristeći bilješke. Možemo napomenuti svoje Kupac razred sa @XStreamAlias:

@XStreamAlias ​​("kupac") kupac javne klase {// ...}

Sada moramo konfigurirati našu instancu XStream da koristi ovu napomenu:

xstream.processAnnotations (Customer.class);

Ako želimo programski konfigurirati alias, možemo koristiti donji kod:

xstream.alias ("kupac", kupac.klasa);

3.2. Poljski pseudonimi

Pretpostavimo da imamo sljedeći XML:

 John Doe 1986-02-14 03: 46: 16.381 UTC 

The fn Oznaka se ne podudara ni s jednim poljem u našem Kupac objekta, pa ćemo morati definirati alias za to polje ako ga želimo deserializirati. To možemo postići pomoću sljedeće bilješke:

@XStreamAlias ​​("fn") private String firstName;

Alternativno, isti cilj možemo postići programski:

xstream.aliasField ("fn", Customer.class, "firstName");

4. Implicitne zbirke

Recimo da imamo sljedeći XML koji sadrži jednostavan popis ContactDetails:

 John Doe 1986-02-14 04: 14: 20.541 UTC 6673543265 0124-2460311 ... 

Želimo učitati popis ContactDetails u a Popis polje u našem Java objektu. To možemo postići pomoću sljedeće bilješke:

@XStreamImplicit privatni popis contactDetailsList;

Alternativno, isti cilj možemo postići programski:

xstream.addImplicitCollection (Customer.class, "contactDetailsList");

5.Zanemari polja

Recimo da imamo sljedeći XML:

 John Doe 1986-02-14 04: 14: 20.541 UTC John Doe 

U gore navedenom XML-u imamo dodatni element što nedostaje našoj Javi Kupac objekt.

Ako pokušamo deserializirati gornji xml, ne vodeći računa o dodatnom elementu, program baca datoteku UnknownFieldException.

Nema takvog polja com.baeldung.pojo.Customer.fullName

Kao što iznimka jasno kaže, XStream ne prepoznaje polje puno ime.

Da bismo prevladali ovaj problem, moramo ga konfigurirati tako da ignorira nepoznate elemente:

xstream.ignoreUnknownElements ();

6. Polja atributa

Pretpostavimo da imamo XML s atributima kao dio elemenata koje bismo htjeli deserializirati kao polje u našem objektu. Mi ćemo dodati a contactType atribut našem ContactDetails objekt:

 6673543265 0124-2460311 

Ako želimo deserializirati contactType XML atribut, možemo koristiti @XStreamAsAttribute napomena na polju u kojem bismo željeli da se pojavi:

@XStreamAsAttribute private String contactType;

Alternativno, isti cilj možemo postići programski:

xstream.useAttributeFor (ContactDetails.class, "contactType");

7. Zaključak

U ovom smo članku istražili mogućnosti koje imamo na raspolaganju prilikom deserializacije XML-a na Java objekte pomoću XStreama.

Cjeloviti izvorni kôd za ovaj članak može se preuzeti s povezanog spremišta GitHub.


$config[zx-auto] not found$config[zx-overlay] not found