Nabavite i objavite popise objekata pomoću RestTemplate

1. Uvod

The RestTemplate class je središnji alat za izvođenje HTTP operacija na klijentskoj strani u proljeće. Pruža nekoliko korisnih metoda za izgradnju HTTP zahtjeva i rukovanje odgovorima.

I od RestTemplate dobro se integrira s Jacksonom, može serijski / deserializirati većinu objekata na i iz JSON-a bez puno napora. Međutim, rad s kolekcijama predmeta nije tako jednostavan.

U ovom uputstvu vidjet ćemo kako se koristi RestTemplate obojici DOBITI i OBJAVI popis objekata.

2. Primjer usluge

Koristit ćemo API za zaposlenike koji ima dvije HTTP krajnje točke - dohvatite sve i izradite:

  • GET / zaposlenici
  • POŠTA / zaposlenici

Za komunikaciju između klijenta i poslužitelja koristit ćemo jednostavni DTO za inkapsuliranje osnovnih podataka o zaposlenicima:

javni razred Zaposlenik {public long id; naslov javnog niza; // standardni konstruktor i postavljači / getteri}

Sada smo spremni za pisanje koda koji koristi RestTemplate za dobivanje i stvaranje popisa Zaposlenik predmeta.

3. Nabavite popis predmeta pomoću RestTemplate

Obično prilikom pozivanja GET-a možete koristiti jednu od pojednostavljenih metoda u RestTemplate, kao što su:

getForObject (URI url, Class responseType)

Ovo šalje zahtjev navedenom URI-ju pomoću GET glagola i pretvara tijelo odgovora u traženi tip Java. Ovo izvrsno funkcionira za većinu klasa, ali ima ograničenje: ne možemo poslati popise objekata.

Problem je zbog brisanja tipa s Java generičkim proizvodima. Kada se aplikacija izvodi, ona ne zna koja se vrsta objekta nalazi na popisu. To znači da se podaci s popisa ne mogu deserijalizirati u odgovarajući tip.

Srećom imamo dvije mogućnosti da to zaobiđemo.

3.1. Korištenje nizova

Prvo, možemo koristiti RestTemplate.getForEntity () DOBITI niz objekata putem responseType parametar. Što god razred mi odredimo da će se podudarati ResponseEntityS-ov tip parametra:

ResponseEntity response = restTemplate.getForEntity ("// localhost: 8080 / zaposlenici /", zaposlenik []. Klasa); Zaposlenik [] zaposlenici = response.getBody ();

Dalje, mogli smo koristiti RestTemplate.exchange postići isti rezultat.

Imajte na umu da je suradnik koji ovdje radi teško dizanje ResponseExtractor, pa ako trebamo daljnju prilagodbu, možemo nazvati izvršiti i pružiti vlastiti primjer.

3.2. Korištenje klase omotača

Neki će API-ji vratiti objekt najviše razine koji sadrži popis zaposlenika umjesto da ga izravno vraćaju. Da bismo riješili ovu situaciju, možemo koristiti klasu omota koja sadrži popis zaposlenika.

javna klasa EmployeeList {privatni popis zaposlenika; javni EmployeeList () {zaposlenici = novi ArrayList (); } // standardni konstruktor i getter / setter}

Sada možemo koristiti jednostavnije getForObject () metoda za dobivanje popisa zaposlenika:

Odgovor EmployeeList = restTemplate.getForObject ("// localhost: 8080 / zaposlenici", EmployeeList.class); Popis zaposlenika = response.getEfficiees ();

Ovaj je kod mnogo jednostavniji, ali zahtijeva dodatni objekt omota.

4. Objavite popis predmeta s RestTemplate

Sada pogledajmo kako poslati popis objekata s našeg klijenta na poslužitelj. Kao i gore, RestTemplate pruža pojednostavljenu metodu za pozivanje POST-a:

postForObject (URI url, zahtjev za objektom, Class responseType)

Ovo šalje HTTP POST na zadani URI, s neobaveznim tijelom zahtjeva, i pretvara odgovor u navedeni tip. Za razliku od GET scenarija gore, ne moramo se brinuti zbog brisanja tipa.

To je zato što sada od Java objekata prelazimo na JSON. Popis objekata i njihov tip poznati su JVM-u, pa se stoga moraju pravilno serilizirati:

Popis newEfficiees = novi ArrayList (); newEfficiees.add (novi zaposlenik (3, "pripravnik")); newEfficiees.add (novi zaposlenik (4, "CEO")); restTemplate.postForObject ("// localhost: 8080 / zaposlenici /", novi zaposlenici, ResponseEntity.class);

4.1. Korištenje klase omotača

Ako trebamo koristiti klasu omotača kako bismo bili u skladu s gore navedenim GET scenarijem, i to je jednostavno. Možemo poslati novi popis pomoću RestTemplate:

Popis newEfficiees = novi ArrayList (); newEfficiees.add (novi zaposlenik (3, "pripravnik")); newEfficiees.add (novi zaposlenik (4, "CEO")); restTemplate.postForObject ("// localhost: 8080 / zaposlenici", novi EmployeeList (newE Employees), ResponseEntity.class);

5. Zaključak

Korištenje RestTemplate jednostavan je način izgradnje HTTP klijenata za komunikaciju s vašim uslugama.

Pruža brojne metode za rad sa svakom HTTP metodom i jednostavnim objektima. Uz malo dodatnog koda, lako ga možemo koristiti za rad s popisima objekata.

Kao i obično, cjeloviti kôd dostupan je u projektu Github.


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