Kartleggingslister med ModelMapper
1. Oversikt
I denne opplæringen forklarer vi hvordan du kartlegger lister over forskjellige elementtyper ved hjelp av ModelMapper-rammeverket. Dette innebærer å bruke generiske typer i Java som en løsning for å konvertere forskjellige typer data fra en liste til en annen .
2. Model Mapper
Hovedrollen til ModelMapper er å kartlegge objekter ved å bestemme hvordan en objektmodell blir kartlagt til en annen, kalt et Data Transformation Object (DTO).
For å bruke ModelMapper, begynner vi med å legge avhengigheten til vår pom.xml:
org.modelmapper modelmapper 2.3.7
2.1. Konfigurasjon
ModelMapper tilbyr en rekke konfigurasjoner for å forenkle kartleggingsprosessen. Vi tilpasser konfigurasjonen ved å aktivere eller deaktivere egnede egenskaper i konfigurasjonen. Det er en vanlig praksis for å sette fieldMatchingEnabled eiendom til ekte og tillat privat feltmatching:
modelMapper.getConfiguration () .setFieldMatchingEnabled (true) .setFieldAccessLevel (Configuration.AccessLevel.PRIVATE);
Ved å gjøre det kan ModelMapper sammenligne private felt i kartklassene (objekter). I denne konfigurasjonen er det ikke strengt nødvendig at alle felt med samme navn finnes i begge klasser. Flere samsvarende strategier er tillatt. Som standard krever en standard matchingsstrategi at alle kilde- og destinasjonsegenskaper må matches i hvilken som helst rekkefølge. Dette er ideelt for vårt scenario.
2.2. Skriv Token
ModelMapper bruker TypeToken til å kartlegge generiske typer. For å se hvorfor dette er nødvendig, la oss se hva som skjer når vi kartlegger en Heltall liste til en Karakter liste:
Liste heltall = ny ArrayList (); heltall.tillegge (1); heltall.tillegge (2); heltall.tillegge (3); Listetegn = ny ArrayList (); modelMapper.map (heltall, tegn);
Videre, hvis vi skriver ut elementene i tegn liste ville vi se en tom liste. Dette skyldes forekomsten av type sletting under kjøring av kjøretid.
Hvis vi endrer vår kart ring for å bruke TypeToken, skjønt, kan vi lage en type bokstavelig for Liste :
Liste tegn = modelMapper.map (heltall, ny TypeToken() {} .getType ());
Ved kompileringstid, TokenType anonym indre sak bevarer Liste parameter type, og denne gangen er konverteringen vår vellykket.
3. Bruke tilpasset kartlegging
Lister i Java kan kartlegges ved hjelp av egendefinerte elementtyper.
La oss for eksempel si at vi vil kartlegge en liste over Bruker enheter til en UserDTO liste. For å oppnå dette vil vi ringe kart for hvert element:
Liste dtos = brukere .stream () .map (bruker -> modelMapper.map (bruker, UserDTO.class)) .collect (Collectors.toList ());
Selvfølgelig, med litt mer arbeid, kan vi lage en generell parameterisert metode:
List mapList (List source, Class targetClass) {return source .stream () .map (element -> modelMapper.map (element, targetClass)) .collect (Collectors.toList ()); }
Så da kunne vi i stedet gjøre:
Liste userDtoList = mapList (brukere, UserDTO.class);
4. Skriv inn kart og eiendomskartlegging
Spesifikke egenskaper som lister eller sett kan legges til User-UserDTO modell. TypeKart gir en metode for eksplisitt å definere kartleggingen av disse egenskapene. De TypeKart objekt lagrer kartinformasjon av spesifikke typer (klasser):
TypeMap typeMap = modelMapper.createTypeMap (UserList.class, UserListDTO.class);
Brukerliste klasse inneholder en samling av Brukers. Her, w e ønsker å kartlegge listen over brukernavn fra denne samlingen til eiendomslisten av UserListDTO klasse. For å oppnå dette vil vi skape først UsersListConverter klasse og bestå den Liste og Liste som parametertyper for konvertering:
public class UsersListConverter utvider AbstractConverter {@Override-beskyttet listekonverterer (listebrukere) {returnerer brukere .stream () .map (bruker :: getUsername) .collect (Collectors.toList ()); }}
Fra det skapte TypeKart objekt legger vi eksplisitt til Kartlegging av eiendom ved å påkalle en forekomst av UsersListConverter klasse:
typeMap.addMappings (mapper -> mapper.using (new UsersListConverter ()) .map (UserList :: getUsers, UserListDTO :: setUsernames));
Inne i addMappings metode, lar en uttrykkskartlegging oss definere kilden til destinasjonsegenskapene med lambdauttrykk. Til slutt konverterer den listen over brukere til den resulterende listen over brukernavn.
5. Konklusjon
I denne opplæringen forklarte vi hvordan lister blir kartlagt ved å manipulere generiske typer i ModelMapper. Vi kan gjøre bruk av TypeToken, generisk typekartlegging og eiendomskartleggingfor å lage objekklistetyper og lage komplekse kartlegginger.
Den komplette kildekoden for denne artikkelen er tilgjengelig på GitHub.