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.


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