Egyéni Mapper a MapStruct-tal

1. Áttekintés

Ebben a cikkben megtudhatjuk, hogyan használhatjuk az egyedi leképezőt a MapStruct könyvtárral.

A MapStruct könyvtárat a Java babtípusok közötti leképezésre használják. Egyéni térképkészítő használatával a MapStruct-tal,testreszabhatjuk az alapértelmezett leképezési módszereket.

2. Maven-függőségek

Vegyük fel a mapstruct könyvtárat a Maven-be pom.xml:

 org.mapstruct mapstruct 1.3.1.Végső 

Az automatikusan létrehozott módszerek megtekintése a projekten belül célmappa, hozzá kell adnunk a annotationProcessorPaths hoz maven-compiler-plugin csatlakoztat:

 org.apache.maven.plugins maven-compiler-plugin 3.5.1 1.8 1.8 org.mapstruct mapstruct 1.3.1.Végső 

3. Custom Mapper

Az egyedi hozzárendeléseket speciális konverziós követelmények megoldására használják. Ennek eléréséhez meg kell határoznunk egy módszert az átalakítás elvégzésére. Ezután értesítenünk kell a MapStructot a módszerről. Végül a MapStruct meghívja a módszert az átalakítás forrásról célra történő elvégzésére.

Képzeljük el például, hogy van egy alkalmazásunk, amely kiszámítja a felhasználó testtömeg-index (BMI) jelentését. A BMI kiszámításához össze kell gyűjtenünk a felhasználó testértékeit. A birodalmi egységek metrikus egységekké történő átalakításához használhatjuk az egyedi leképező módszereket.

Az egyedi leképező kétféle módon használható a MapStruct-tal. Vagy meghívhatjuk az egyéni metódust úgy, hogy beírjuk a @Térképezés annotáció képzettByName tulajdonságot, vagy létrehozhatunk hozzá jegyzetet.

Mielőtt elkezdenénk, meg kell határoznunk egy DTO osztályt a birodalmi értékek megtartására:

public class UserBodyImperialValuesDTO {private int inch; privát int font; // kivitelező, mérőeszközök és beállítók}

Ezután definiáljunk egy DTO osztályt a metrikus értékek tárolására:

public class UserBodyValues ​​{privát dupla kilogramm; magán dupla centiméter; // kivitelező, mérőeszközök és beállítók}

3.1. Egyéni leképező módszerrel

Az egyéni leképezők használatának megkezdéséhez hozzunk létre egy interfészt a @Mapper kommentár:

@Mapper nyilvános felület UserBodyValuesMapper {// ...}

Másodszor, hozzuk létre az egyéni módszerünket a kívánt visszatérési típussal és az átalakítandó argumentummal. Használnunk kell a @Nevezett kommentár az értékparaméterrel a MapStruct tájékoztatásához az egyéni leképező módszerről:

@Mapper nyilvános felület UserBodyValuesMapper {@Named ("inchToCentimeter") nyilvános statikus dupla inchToCentimeter (int hüvelyk) {return hüvelyk * 2,54; } // ...}

És végül definiáljuk a mapper felület metódusát a @Térképezés annotáció. Ezen a feljegyzésen belül elmondjuk a MapStructnak a forrás típusát, a céltípust és az általa használt módszert:

@Mapper nyilvános felület UserBodyValuesMapper {UserBodyValuesMapper INSTANCE = Mappers.getMapper (UserBodyValuesMapper.class); @Mapping (forrás = "hüvelyk", target = "centiméter", képzettByName = "inchToCentimeter") nyilvános UserBodyValues ​​userBodyValuesMapper (UserBodyImperialValuesDTO dto); @Név ("inchToCentimeter") nyilvános statikus dupla inchToCentimeter (int hüvelyk) {return hüvelyk * 2,54; }}

Teszteljük egyedi térképkészítőnket:

UserBodyImperialValuesDTO dto = új UserBodyImperialValuesDTO (); dto.setInch (10); UserBodyValues ​​obj = UserBodyValuesMapper.INSTANCE.userBodyValuesMapper (dto); assertNotNull (obj); assertEquals (25,4, obj.getCentimeter (), 0); 

3.2. Egyéni térképkészítő egy kommentárral

Egy egyéni térképező használatához annotációval meg kell határoznunk egy annotációt a @Nevezett annotáció. Ezután a @ megadásával tájékoztatnunk kell a MapStructot az újonnan létrehozott kommentárról.Térképezés annotáció képzettByName paraméter.

Lássuk, hogyan definiáljuk az annotációt:

@Qualifier @Target (ElementType.METHOD) @Retention (RetentionPolicy.CLASS) public @interface PoundToKilogramMapper {}

Tegyük hozzá a @PoundToKilogramMapper annotáció a mi fontToKilogram módszer:

@PoundToKilogramMapper public static double poundToKilogram (int pound) {return font * 0,4535; } 

Most definiáljuk a mapper felület metódusát a @Térképezés annotáció. A leképezési kommentárban eláruljuk a MapStruct-nak a forrás típusát, a céltípust és az általa használt feliratozási osztályt:

@Mapper nyilvános felület UserBodyValuesMapper {UserBodyValuesMapper INSTANCE = Mappers.getMapper (UserBodyValuesMapper.class); @Mapping (forrás = "font", target = "kilogramm", képzettBy = PoundToKilogramMapper.class) public UserBodyValues ​​userBodyValuesMapper (UserBodyImperialValuesDTO dto); @PoundToKilogramMapper public static double poundToKilogram (int pound) {return font * 0,4535; }}

Végül teszteljük az egyedi térképkészítőnket:

UserBodyImperialValuesDTO dto = új UserBodyImperialValuesDTO (); dto.setPound (100); UserBodyValues ​​obj = UserBodyValuesMapper.INSTANCE.userBodyValuesMapper (dto); assertNotNull (obj); assertEquals (45,35, obj.getKilogram (), 0); 

4. Következtetés

Ebben a cikkben, megtanultuk, hogyan kell egy egyedi leképezőt használni a MapStruct könyvtárral.

Ezeknek a példáknak és teszteknek a megvalósítása elérhető a GitHub oldalon.