Získajte a zverejnite zoznamy objektov pomocou RestTemplate

1. Úvod

The RestTemplate trieda je centrálnym nástrojom na vykonávanie operácií HTTP na strane klienta na jar. Poskytuje niekoľko užitočných metód na vytváranie požiadaviek HTTP a spracovanie odpovedí.

A keďže RestTemplate integruje sa dobre s Jacksonom, dokáže bez veľkého úsilia serializovať / deserializovať väčšinu objektov do az JSON. Avšak práca so zbierkami objektov nie je taká jednoduchá.

V tomto návode uvidíme, ako sa používa RestTemplate obom ZÍSKAJTE a POST zoznam objektov.

2. Ukážka služby

Budeme používať zamestnanecké API, ktoré má dva koncové body HTTP - získať všetky a vytvoriť:

  • GET / zamestnanci
  • POŠTA / zamestnanci

Na komunikáciu medzi klientom a serverom použijeme jednoduchý DTO na zapuzdrenie základných údajov o zamestnancoch:

public class Employee {public long id; verejný názov reťazca; // štandardný konštruktor a nastavovatelia / getéri}

Teraz sme pripravení napísať kód, ktorý používa RestTemplate získať a vytvoriť zoznamy Zamestnanec predmety.

3. Získajte zoznam objektov pomocou RestTemplate

Pri volaní GET môžete zvyčajne použiť niektorú zo zjednodušených metód v RestTemplate, ako napr:

getForObject (adresa URL URI, trieda responseType)

Toto odošle požiadavku na zadaný URI pomocou slovesa GET a prevedie telo odpovede na požadovaný typ Java. Toto funguje skvele pre väčšinu tried, má to však svoje obmedzenie: nemôžeme posielať zoznamy objektov.

Problém je spôsobený vymazaním typu v generike Java. Keď je aplikácia spustená, nemá vedomosti o tom, aký typ objektu je v zozname. To znamená, že údaje v zozname nemožno deserializovať do príslušného typu.

Našťastie máme dve možnosti, ako to obísť.

3.1. Používanie polí

Najprv môžeme použiť RestTemplate.getForEntity () ZÍSKAŤ pole objektov pomocou responseType parameter. Hocičo trieda zadáme, že sa bude zhodovať ResponseEntityTyp parametra:

ResponseEntity response = restTemplate.getForEntity ("// localhost: 8080 / zamestnanci /", zamestnanec []. Trieda); Zamestnanec [] zamestnanci = response.getBody ();

Ďalej sme mohli použiť RestTemplate.exchange dosiahnuť rovnaký výsledok.

Všimnite si, že tu je spolupracovník, ktorý tu robí ťažké zdvíhanie ResponseExtractor, takže ak potrebujeme ďalšie prispôsobenie, môžeme zavolať vykonať a poskytneme našu vlastnú inštanciu.

3.2. Používanie triedy obaľovača

Niektoré rozhrania API vrátia objekt najvyššej úrovne, ktorý obsahuje zoznam zamestnancov, namiesto priameho vrátenia zoznamu. Na riešenie tejto situácie môžeme použiť triedu obálky, ktorá obsahuje zoznam zamestnancov.

verejná trieda EmployeeList {zamestnanci súkromného zoznamu; public EmployeeList () {zamestnanci = nový ArrayList (); } // štandardný konštruktor a getter / setter}

Teraz môžeme použiť jednoduchšie getForObject () metóda na získanie zoznamu zamestnancov:

EmployeeList response = restTemplate.getForObject ("// localhost: 8080 / zamestnanci", EmployeeList.class); Zoznam zamestnancov = response.getEmployees ();

Tento kód je oveľa jednoduchší, ale vyžaduje ďalší obalový objekt.

4. Zašlite zoznam objektov pomocou RestTemplate

Teraz sa pozrime na to, ako poslať zoznam objektov z nášho klienta na server. Rovnako ako vyššie, RestTemplate poskytuje zjednodušenú metódu pre volanie POST:

postForObject (adresa URL URI, požiadavka na objekt, trieda responseType)

To pošle HTTP POST na daný URI s voliteľným telom žiadosti a prevedie odpoveď na zadaný typ. Na rozdiel od vyššie uvedeného scenára GET nemusíme sa báť vymazania typu.

Je to tak preto, lebo teraz prechádzame z objektov Java do formátu JSON. Zoznam objektov a ich typ pozná JVM, a preto je potrebné ich správne serializovať:

Zoznam newEmployees = new ArrayList (); newEmployees.add (nový zamestnanec (3, "stážista")); newEmployees.add (nový zamestnanec (4, „výkonný riaditeľ“)); restTemplate.postForObject ("// localhost: 8080 / zamestnanci /", newEmployees, ResponseEntity.class);

4.1. Používanie triedy obaľovača

Ak potrebujeme použiť súhrnnú triedu, aby bola konzistentná s vyššie uvedeným scenárom GET, je to tiež jednoduché. Nový zoznam môžeme poslať pomocou RestTemplate:

Zoznam newEmployees = new ArrayList (); newEmployees.add (nový zamestnanec (3, "stážista")); newEmployees.add (nový zamestnanec (4, „výkonný riaditeľ“)); restTemplate.postForObject ("// localhost: 8080 / zamestnanci", new EmployeeList (newEmployees), ResponseEntity.class);

5. Záver

Používanie RestTemplate je jednoduchý spôsob vytvárania klientov HTTP, aby komunikovali s vašimi službami.

Poskytuje množstvo metód pre prácu s každou metódou HTTP a jednoduchými objektmi. S trochou kódu navyše ho môžeme ľahko použiť na prácu so zoznamami objektov.

Kompletný kód je ako obvykle k dispozícii v projekte Github.


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