Objektumok listájának beszerzése és közzététele a RestTemplate segítségével

1. Bemutatkozás

A RestTemplate osztály az ügyféloldali HTTP-műveletek tavaszi végrehajtásának központi eszköze. Számos segédprogramot kínál a HTTP kérések összeállításához és a válaszok kezeléséhez.

És azóta RestTemplate jól integrálódik Jacksonnal, a legtöbb objektumot különösebb erőfeszítés nélkül képes sorosítani / deszerializálni a JSON-ba és onnan. Azonban, tárgygyűjteményekkel dolgozni nem olyan egyszerű.

Ebben az oktatóanyagban megtudjuk, hogyan kell használni RestTemplate mindkettőre KAP és POST az objektumok listája.

2. Példa szolgáltatásra

Olyan alkalmazott API-t fogunk használni, amelynek két HTTP végpontja van - szerezzen be mindent és hozzon létre:

  • GET / alkalmazottak
  • POST / alkalmazottak

Az ügyfél és a szerver közötti kommunikációhoz egy egyszerű DTO-t használunk az alkalmazottak alapvető adatainak beillesztésére:

public class Alkalmazott {public long id; public String cím; // szabványos kivitelező és beállítók / szerelők}

Most készen állunk a használt kód megírására RestTemplate listák létrehozása és létrehozása Munkavállaló tárgyakat.

3. Szerezzen be egy objektumlistát a RestTemplate

A GET meghívásakor általában a következő egyszerűsített módszerek egyikét használhatja RestTemplate, mint például:

getForObject (URI URL, Class responseType)

Ez kérelmet küld a megadott URI-nak a GET igével, és a válasz törzsét átalakítja a kért Java típusra. Ez nagyszerűen működik a legtöbb osztályban, de van korlátozása: nem küldhetünk objektumlistákat.

A probléma a Java generikus típusok törlésének köszönhető. Amikor az alkalmazás fut, nincs tudomása arról, hogy milyen típusú objektum szerepel a listában. Ez azt jelenti, hogy a listában szereplő adatok nem deserializálhatók a megfelelő típusba.

Szerencsére két lehetőségünk van ezt megkerülni.

3.1. A tömbök használata

Először is használhatjuk RestTemplate.getForEntity () objektumok tömbjének megszerzéséhez a responseType paraméter. Tök mindegy osztály megadjuk, hogy meg fog egyezni ResponseEntityParaméter-típusa:

ResponseEntity response = restTemplate.getForEntity ("// localhost: 8080 / alkalmazottak /", Employee []. Osztály); Alkalmazott [] alkalmazottak = response.getBody ();

Továbbá felhasználhattuk volna RestTemplate.exchange ugyanazon eredmény elérése érdekében.

Ne feledje, hogy az itt a nehéz emelést végző munkatárs az ResponseExtractor, így ha további testreszabásra van szükségünk, felhívhatjuk végrehajtani és biztosítsuk saját példánkat.

3.2. Wrapper osztály használata

Egyes API-k egy felső szintű objektumot adnak vissza, amely tartalmazza az alkalmazottak listáját ahelyett, hogy közvetlenül visszaadná a listát. Ennek a helyzetnek a kezelésére használhatunk egy wrapper osztályt, amely tartalmazza az alkalmazottak listáját.

public class EmployeeList {private List alkalmazottak; public EmployeeList () {alkalmazottak = new ArrayList (); } // szabványos konstruktor és getter / setter}

Most már használhatjuk az egyszerűbbet getForObject () módszer az alkalmazottak listájának megszerzésére:

EmployeeList válasz = restTemplate.getForObject ("// localhost: 8080 / alkalmazottak", EmployeeList.class); Az alkalmazottak listája = response.getEmployees ();

Ez a kód sokkal egyszerűbb, de további burkolóobjektumot igényel.

4. Tegyen fel egy objektumlistát a következővel: RestTemplate

Most nézzük meg, hogyan küldhetünk objektumlistát kliensünkből a szerverre. Csakúgy, mint fent, RestTemplate egyszerűsített módszert biztosít a POST hívására:

postForObject (URI URL, Object request, Class responseType)

Ez HTTP POST-ot küld az adott URI-nak az opcionális kérelem törzsével együtt, és a választ a megadott típusra konvertálja. A fenti GET forgatókönyvtől eltérően nem kell aggódnunk a típusú törlés miatt.

Ez azért van, mert most a Java objektumokról a JSON-ra megyünk. Az objektumok listáját és típusát a JVM ismeri, ezért megfelelően sorosítják:

List newEmployees = new ArrayList (); newEmployees.add (new Employee (3, "Intern")); newEmployees.add (új alkalmazott (4, "vezérigazgató")); restTemplate.postForObject ("// localhost: 8080 / alkalmazottak /", newEmployees, ResponseEntity.class);

4.1. Wrapper osztály használata

Ha egy burkoló osztályt kell használnunk, hogy megfeleljünk a fenti GET forgatókönyvnek, az is egyszerű. Új listát küldhetünk a RestTemplate:

List newEmployees = new ArrayList (); newEmployees.add (new Employee (3, "Intern")); newEmployees.add (új alkalmazott (4, "vezérigazgató")); restTemplate.postForObject ("// localhost: 8080 / alkalmazottak", new EmployeeList (newEmployees), ResponseEntity.class);

5. Következtetés

A RestTemplate használata egyszerű módja a HTTP-ügyfelek létrehozásának, hogy kommunikáljanak a szolgáltatásaival.

Számos módszert biztosít a HTTP-módszerekkel és az egyszerű objektumokkal való együttműködéshez. Egy kis extra kóddal könnyedén felhasználhatjuk az objektumlisták kezelésére.

Szokás szerint a teljes kód elérhető a Github projektben.