Používateľská príručka k aplikácii XStream: Konverzia XML na objekty

1. Prehľad

V predchádzajúcom článku sme sa naučili, ako používať XStream na serializáciu objektov Java do XML. V tomto tutoriále sa naučíme, ako postupovať opačne: deserializovať objekty XML na objekty Java. Tieto úlohy je možné vykonať pomocou anotácií alebo programovo.

Ak sa chcete dozvedieť viac o základných požiadavkách na nastavenie XStreamu a jeho závislostiach, pozrite si predchádzajúci článok.

2. Deserializácia objektu z XML

Na začiatok predpokladajme, že máme nasledujúci XML:

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

Musíme to previesť na Javu Zákazník objekt:

verejná trieda Zákazník {private String firstName; private String priezvisko; súkromné ​​Dátum nar; // štandardní zakladatelia a obstarávatelia} 

XML je možné vkladať rôznymi spôsobmi, vrátane Súbor, InputStream, Čitateľalebo String. Pre jednoduchosť budeme predpokladať, že máme vyššie uvedený XML v a String objekt.

Zákazník prevedenýCustomer = (Zákazník) xstream.fromXML (customerXmlString); Assert.assertTrue (convertedCustomer.getFirstName (). Equals ("John"));

3. Aliasy

V prvom príklade malo XML v krajnej značke XML úplný názov triedy, ktorý sa zhodoval s umiestnením našej Zákazník trieda. S týmto nastavením XStream ľahko prevedie XML na náš objekt bez akejkoľvek ďalšej konfigurácie. Ale tieto podmienky nemusíme mať vždy. Možno nebudeme mať kontrolu nad pomenovaním značiek XML, alebo sa môžeme rozhodnúť pridať aliasy pre polia.

Predpokladajme napríklad, že sme upravili náš XML tak, aby sa pre vonkajšiu značku nepoužíval úplný názov triedy:

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

Tento XML môžeme skryť vytvorením aliasov.

3.1. Aliasy triedy

Aliasy registrujeme v inštancii XStream buď programovo, alebo pomocou anotácií. Môžeme anotovať naše Zákazník trieda s @XStreamAlias:

@XStreamAlias ​​("zákazník") verejná trieda Zákazník {// ...}

Teraz musíme nakonfigurovať našu inštanciu XStream tak, aby používala túto anotáciu:

xstream.processAnnotations (Customer.class);

Prípadne, ak si prajeme programovo nakonfigurovať alias, môžeme použiť nasledujúci kód:

xstream.alias ("zákazník", Customer.class);

3.2. Poľné prezývky

Predpokladajme, že máme nasledujúce XML:

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

The fn značka nezodpovedá žiadnym poliam v našej Zákazník objekt, takže ak ho chceme deserializovať, budeme musieť pre dané pole definovať alias. Toho môžeme dosiahnuť pomocou nasledujúcej anotácie:

@XStreamAlias ​​("fn") súkromný reťazec meno;

Rovnaký cieľ môžeme dosiahnuť aj programovo:

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

4. Implicitné zbierky

Povedzme, že máme nasledujúci súbor XML, ktorý obsahuje jednoduchý zoznam Kontaktné údaje:

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

Chceme načítať zoznam Kontaktné údaje do a Zoznam pole v našom objekte Java. Toho môžeme dosiahnuť pomocou nasledujúcej anotácie:

@XStreamImplicit private List contactDetailsList;

Rovnaký cieľ môžeme dosiahnuť aj programovo:

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

5.Ignorovať polia

Povedzme, že máme nasledujúci formát XML:

 John Doe 1986-02-14 04:14: 20,541 UTC John Doe 

Vo vyššie uvedenom súbore XML máme ďalší prvok ktorý v našej Jave chýba Zákazník objekt.

Pokiaľ sa pokúsime rekonštruovať vyššie uvedený xml bez toho, aby sme sa nejako zvlášť starali o prvok navyše, program vyhodí znak UnknownFieldException.

Žiadne také pole com.baeldung.pojo.Customer.fullName

Ako je zrejmé z výnimky, XStream nerozpozná pole celé meno.

Aby sme tento problém prekonali, musíme ho nakonfigurovať tak, aby ignoroval neznáme prvky:

xstream.ignoreUnknownElements ();

6. Polia atribútov

Predpokladajme, že máme XML s atribútmi ako súčasť prvkov, ktoré by sme chceli deserializovať ako pole v našom objekte. Pridáme a contactType atribút nášmu Kontaktné údaje objekt:

 6673543265 0124-2460311 

Ak chceme deserializovať contactType XML atribút, môžeme použiť @XStreamAsAttribute anotáciu k poľu, v ktorom by sme chceli, aby sa zobrazil:

@XStreamAsAttribute private String contactType;

Rovnaký cieľ môžeme dosiahnuť aj programovo:

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

7. Záver

V tomto článku sme preskúmali možnosti, ktoré máme k dispozícii pri deserializácii objektov XML na objekty Java pomocou nástroja XStream.

Celý zdrojový kód tohto článku je možné stiahnuť z prepojeného úložiska GitHub.


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