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.