Mapper מותאם אישית עם MapStruct

1. סקירה כללית

במאמר זה נלמד כיצד להשתמש במפות מותאמות אישית עם ספריית MapStruct.

ספריית MapStruct משמשת למיפוי בין סוגי שעועית Java. באמצעות מיפוי מותאם אישית עם MapStruct,אנו יכולים להתאים אישית את שיטות המיפוי המוגדרות כברירת מחדל.

2. תלות Maven

בואו נוסיף את ספריית mapstruct ל- Maven שלנו pom.xml:

 org.mapstruct mapstruct 1.3.1. גמר 

כדי לראות את השיטות שנוצרו אוטומטית בתוך הפרויקט תיקיית יעד, עלינו להוסיף את annotationProcessorPaths אל ה תוסף maven-compiler חיבור:

 org.apache.maven.plugins maven-compiler-plugin 3.5.1 1.8 1.8 org.mapstruct mapstruct 1.3.1.Final 

3. ממפה בהתאמה אישית

ממפים מותאמים אישית משמשים לפתרון דרישות המרה ספציפיות. כדי להשיג זאת, עלינו להגדיר שיטה לביצוע ההמרה. לאחר מכן, עלינו להודיע ​​ל- MapStruct על השיטה. לבסוף, MapStruct תקרא לשיטה לבצע את ההמרה ממקור למטרה.

למשל, בואו נדמיין שיש לנו אפליקציה המחשבת את דוח מדד מסת הגוף (BMI) של המשתמש. כדי לחשב את ה- BMI, עלינו לאסוף את ערכי הגוף של המשתמש. כדי להמיר יחידות אימפריאליות ליחידות מטריות, אנו יכולים להשתמש בשיטות המפות המותאמות אישית.

ישנן שתי דרכים להשתמש במפות מותאמות אישית עם MapStruct. אנו יכולים להתקשר לשיטה המותאמת אישית על ידי הקלדתה בתוך ה- @ מיפוי ביאור qualifiedByName נכס, או שנוכל ליצור הערה עבורו.

לפני שנתחיל, עלינו להגדיר מעמד DTO שיחזיק בערכים קיסריים:

מחלקה ציבורית UserBodyImperialValuesDTO {אינטש פרטי; לירה פרטית; // בונה, גטרים וקובעים}

לאחר מכן, נגדיר מחלקת DTO שתחזיק ערכי מדדים:

UserBodyValues ​​בכיתה ציבורית {קילוגרם כפול פרטי; סנטימטר כפול פרטי; // בונה, גטרים וקובעים}

3.1. Mapper מותאם אישית עם שיטה

כדי להתחיל להשתמש במפות מותאמות אישית, בואו ניצור ממשק עם ה- @Mapper ביאור:

ממשק ציבורי @Mapper UserBodyValuesMapper {// ...}

שנית, בואו ניצור את השיטה המותאמת אישית שלנו עם סוג ההחזרה הרצוי והטיעון שאנחנו צריכים להמיר. עלינו להשתמש ב- @נקרא ביאור עם פרמטר הערך כדי ליידע MapStruct על שיטת המפות המותאמות אישית:

ממשק ציבורי @Mapper UserBodyValuesMapper {@Named ("inchToCentimeter") פומבי סטטי כפול inchToCentimeter (int אינץ) {return inch * 2.54; } // ...}

ולסיום, בואו נגדיר את שיטת ממשק המפה עם ה- @ מיפוי ביאור. במסגרת הערה זו, נספר ל- MapStruct על סוג המקור, סוג היעד והשיטה בה ישתמש:

ממשק ציבורי @Mapper UserBodyValuesMapper {UserBodyValuesMapper INSTANCE = Mappers.getMapper (UserBodyValuesMapper.class); @Mapping (source = "inch", target = "centimeter", qualifiedByName = "inchToCentimeter") UserBodyValues ​​ציבורי userBodyValuesMapper (UserBodyImperialValuesDTO dto); @Named ("inchToCentimeter") כפול inchToCentimeter סטטי כפול (אינטש אינץ ') {return inch * 2.54; }}

בואו לבדוק את המפה המותאמת אישית שלנו:

UserBodyImperialValuesDTO dto = UserBodyImperialValuesDTO חדש); dto.setInch (10); UserBodyValues ​​obj = UserBodyValuesMapper.INSTANCE.userBodyValuesMapper (dto); assertNotNull (obj); assertEquals (25.4, obj.getCentimeter (), 0); 

3.2. ממפה מותאם אישית עם ביאור

כדי להשתמש במפות מותאמות אישית עם ביאור, עלינו להגדיר ביאור במקום ה- @ שמות ביאור. לאחר מכן, עלינו ליידע את MapStruct על ההערה החדשה שנוצרה על ידי ציון ה- @מיפוי ביאור של qualifiedByName פָּרָמֶטֶר.

בואו נראה כיצד אנו מגדירים את ההערה:

@Qualifier @Target (ElementType.METHOD) @Retention (RetentionPolicy.CLASS) ציבורי @interface PoundToKilogramMapper {}

בואו נוסיף את @PoundToKilogramMapper ביאור שלנו poundToKilogram שיטה:

@PoundToKilogramMapper פעמיים סטטיות פומביות כפולות ToToKilogram (int פאונד) {פאונד החזר * 0.4535; } 

עכשיו, בואו נגדיר את שיטת ממשק המפה עם ה- @ מיפוי ביאור. בתוך הערת המיפוי, נספר ל- MapStruct על סוג המקור, סוג היעד ומחלקת ההערות בה ישתמש:

ממשק ציבורי @Mapper UserBodyValuesMapper {UserBodyValuesMapper INSTANCE = Mappers.getMapper (UserBodyValuesMapper.class); @Mapping (מקור = "פאונד", יעד = "קילוגרם", qualifiedBy = PoundToKilogramMapper.class) UserBodyValues ​​ציבורי userBodyValuesMapper (UserBodyImperialValuesDTO dto); @PoundToKilogramMapper פעמיים סטטיות פומביות כפולות ToToKilogram (int פאונד) {פאונד החזר * 0.4535; }}

לבסוף, בואו נבדוק את המפה המותאמת אישית שלנו:

UserBodyImperialValuesDTO dto = UserBodyImperialValuesDTO חדש); dto.setPound (100); UserBodyValues ​​obj = UserBodyValuesMapper.INSTANCE.userBodyValuesMapper (dto); assertNotNull (obj); assertEquals (45.35, obj.getKilogram (), 0); 

4. מסקנה

במאמר זה, למדנו כיצד להשתמש במפות מותאמות אישית עם ספריית MapStruct.

היישומים של דוגמאות ומבחנים אלה זמינים באתר GitHub.


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