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.