Listák leképezése a ModelMapper segítségével
1. Áttekintés
Ebben az oktatóanyagban elmagyarázzuk, hogyan lehet a különböző elemtípusokat felsorolni a ModelMapper keretrendszer segítségével. Ez magában foglalja az általános típusok használatát a Java-ban megoldásként a különböző típusú adatok konvertálásához egy listából a másikba .
2. Mapper modell
A ModelMapper fő szerepe az objektumok feltérképezése azáltal, hogy meghatározza, hogy az egyik objektummodell hogyan képződik egy másikra, az úgynevezett adatátalakítási objektumnak (Data Transformation Object, DTO).
A ModelMapper használata érdekében kezdjük azzal, hogy hozzáadjuk a függőséget pom.xml:
org.modelmapper modelmapper 2.3.7
2.1. Konfiguráció
A ModelMapper különféle konfigurációkat kínál a leképezési folyamat egyszerűsítése érdekében. A konfigurációt a konfiguráció megfelelő tulajdonságainak engedélyezésével vagy letiltásával testre szabjuk. Ez egy általános gyakorlat a fieldMatchingEnabled tulajdonhoz igaz és lehetővé teszi a privát mező egyeztetését:
modelMapper.getConfiguration () .setFieldMatchingEnabled (true) .setFieldAccessLevel (Configuration.AccessLevel.PRIVATE);
Ezzel a ModelMapper összehasonlíthatja a leképezési osztályok (objektumok) magánterületeit. Ebben a konfigurációban nem feltétlenül szükséges, hogy minden azonos nevű mező mindkét osztályban létezzen. Több egyeztetési stratégia megengedett. Alapértelmezés szerint a szokásos egyeztetési stratégia megköveteli, hogy minden forrás- és céltulajdonságot bármilyen sorrendben meg kell egyezni. Ez ideális a forgatókönyvünkhöz.
2.2. Írja be a tokent
A ModelMapper a TypeToken-et használja az általános típusok feltérképezéséhez. Hogy miért van erre szükség, nézzük meg, mi történik, ha feltérképezünk egy Egész szám listát a karakter lista:
Lista egész számok = new ArrayList (); egészek.add (1); egészek.add (2); egészek.add (3); Karakterlista = new ArrayList (); modelMapper.map (egész számok, karakterek);
Továbbá, ha kinyomtatjuk a karakterek egy üres listát látnánk. Ez annak a következménye, hogy a futásidejű végrehajtás során előfordult egy típusú törlés.
Ha változtatunk térkép hívás használni TypeToken, bár létrehozhatunk egy típusú szó szerinti szót Lista :
Karakterlista = modelMapper.map (egész számok, új TypeToken() {} .getType ());
Az összeállítás idején a TokenType névtelen belső eset megőrzi a Lista paramétertípus, és ezúttal az átalakításunk sikeres.
3. Az Egyéni típusleképezés használata
A Java listák egyedi elemtípusok segítségével leképezhetők.
Tegyük fel például, hogy fel akarunk térképezni egy listát Felhasználó entitások a UserDTO lista. Ennek elérése érdekében felhívjuk térkép minden elemhez:
Sorolja fel a dtos = felhasználókat .stream () .map (felhasználó -> modelMapper.map (felhasználó, UserDTO.class)) .collect (Collectors.toList ());
Természetesen néhány további munkával általános célú, paraméterezett módszert készíthetnénk:
List mapList (Lista forrás, Osztály targetClass) {visszatérési forrás .stream () .map (elem -> modelMapper.map (elem, targetClass)) .collect (Collectors.toList ()); }
Tehát akkor ezt tehetnénk:
List userDtoList = mapList (felhasználók, UserDTO.class);
4. Írja be a Map and Property Mapping elemet
Konkrét tulajdonságok, például listák vagy halmazok hozzáadhatók a Felhasználó-FelhasználóDTO modell. TypeMap módszert biztosít ezen tulajdonságok feltérképezésének kifejezett meghatározására. A TypeMap az objektum bizonyos típusú (osztályok) leképezési információkat tárol:
TypeMap typeMap = modelMapper.createTypeMap (UserList.class, UserListDTO.class);
UserList osztály tartalmazza a gyűjteményt Felhasználós. Itt, w szeretnénk feltérképezni a gyűjtemény felhasználóneveinek listáját az ingatlanlistára a UserListDTO osztály. Ennek elérése érdekében először létrehozunk UsersListConverter osztályban, és adja át Lista és Lista mint konverziós paramétertípusok:
a public class UsersListConverter kiterjeszti az AbstractConverter alkalmazást {@ A védett lista konvertálása (felhasználók listája) felülbírálása {visszatérő felhasználók .stream () .map (Felhasználó :: getUsername) .collect (Collectors.toList ()); }}
A létrehozottból TypeMap objektumhoz kifejezetten hozzáadjuk a Tulajdonság-hozzárendelést a UsersListConverter osztály:
typeMap.addMappings (mapper -> mapper.using (new UsersListConverter ()) .map (UserList :: getUsers, UserListDTO :: setUsernames));
Benne addMappings módszerrel, egy kifejezés-leképezés lehetővé teszi számunkra, hogy lambda-kifejezésekkel meghatározzuk a forrás és a cél tulajdonságait. Végül átalakítja a felhasználók listáját az eredményül kapott felhasználónevek listájává.
5. Következtetés
Ebben az oktatóanyagban elmagyaráztuk, hogyan hozzák létre a listákat az általános típusok manipulálásával a ModelMapper alkalmazásban. Használhatjuk TypeToken, általános típusú és tulajdonság-leképezésobjektumlista típusok létrehozásához és összetett leképezésekhez.
A cikk teljes forráskódja elérhető a GitHub oldalon.