Fortsetzung des letzten Males
http://qiita.com/kentama/items/09a8573bd5d0831b470e http://qiita.com/kentama/items/55c71ca28f0c5af8d4ed
Die Typkonvertierung kann zum Zeitpunkt der Zuordnung wie int-> String durchgeführt werden. Zu diesem Zeitpunkt kann auch das Format angegeben werden.
Bean
public class Hoge {
private String date;
private String number;
// constructor/getter/setter
}
public class Fuga {
private LocalDate date;
private int number;
// constructor/getter/setter
}
@Mapper
public interface ConversionMapper {
ConversionMapper INSTANCE = Mappers.getMapper(ConversionMapper.class);
@Mapping(target = "date", source = "date", dateFormat = "JJJJ Jahr MM Monat TT Tag") // (1)
@Mapping(target = "number", source = "number", numberFormat = "#,###") // (2)
Hoge convert(Fuga fuga);
}
(1) Geben Sie das Datumsformat im Attribut dateFormat
an.
(2) Geben Sie das numerische Format im Attribut numberFormat
an.
Fuga fuga = new Fuga(LocalDate.of(2017, 4, 1), 1234567890);
Hoge hoge = ConversionMapper.INSTANCE.convert(fuga);
System.out.println(hoge.getDate()); //01. April 2017
System.out.println(hoge.getNumber()); // 1,234,567,890
Sie können eine Liste auch mit @ IterableMapping
typkonvertieren.
Dieses Mal wird int-> String konvertiert und 3 Ziffern werden mit Nullen aufgefüllt.
@Mapper
public interface ConversionMapper {
ConversionMapper INSTANCE = Mappers.getMapper(ConversionMapper.class);
@IterableMapping(numberFormat = "000")
List<String> zeroPadding(List<Integer> numbers);
}
List<String> numbers = ConversionMapper.INSTANCE.zeroPadding(Arrays.asList(1, 2, 56, 76, 863));
System.out.println(numbers); // [001, 002, 056, 076, 863]
Sie können andere Mapper von Mapper verwenden. Sie können einen von MapStruct generierten Mapper oder einen unabhängig implementierten Mapper angeben.
Bean
public class Hoge {
private String date;
// constructor/getter/setter
}
public class Fuga {
private LocalDate date;
// constructor/getter/setter
}
Erstellen Sie dieses Mal Ihren eigenen Mapper für LocalDate-> String-Konvertierung und verwenden Sie ihn erneut.
Original Mapper
public class LocalDateMapper {
public String asString(LocalDate date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("JJJJ Jahr MM Monat TT Tag");
return date != null ? date.format(formatter) : null;
}
}
@Mapper(uses = LocalDateMapper.class) // (1)
public interface InvokingOtherMapper {
InvokingOtherMapper INSTANCE = Mappers.getMapper(InvokingOtherMapper.class);
Hoge fugaToHoge(Fuga fuga);
}
(1) Geben Sie den Mapper an, der im Attribut "using" wiederverwendet werden soll.
Fuga fuga = new Fuga(LocalDate.of(2017, 4, 1));
Hoge hoge = InvokingOtherMapper.INSTANCE.fugaToHoge(fuga);
System.out.println(hoge.getDate()); //01. April 2017
Sie können Ihrer eigenen Zuordnungslogik eine Anmerkung hinzufügen, damit Mapper Ihre eigene Zuordnungslogik verwenden kann. Hier wird als Beispiel eine Zuordnung zum Konvertieren in Groß- und Kleinbuchstaben durchgeführt.
Bean
public class Hoge {
private String hoge1;
private String hoge2;
// constructor/getter/setter
}
public class Fuga {
public String fuga1;
public String fuga2;
// constructor/getter/setter
}
public class Characters {
public String upperCase(String string) {
return (string == null) ? null : string.toUpperCase();
}
public String lowerCase(String string) {
return (string == null) ? null : string.toLowerCase();
}
}
@Qualifier
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface CharacterConverter {
}
@Qualifier
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface ToUpper {
}
@Qualifier
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface ToLower {
}
Fügen Sie die erstellte Anmerkung zur Zuordnungslogik hinzu.
@CharacterConverter
public class Characters {
@ToUpper
public String upperCase(String string) {
return (string == null) ? null : string.toUpperCase();
}
@ToLower
public String lowerCase(String string) {
return (string == null) ? null : string.toLowerCase();
}
}
@Mapper(uses = Characters.class) // (1)
public interface HogeFugaMapper {
HogeFugaMapper INSTANCE = Mappers.getMapper(HogeFugaMapper.class);
@Mapping(target = "hoge1", source = "fuga1", qualifiedBy = { CharacterConverter.class, ToUpper.class }) // (2)
@Mapping(target = "hoge2", source = "fuga2", qualifiedBy = { CharacterConverter.class, ToLower.class }) // (3)
Hoge fugaToHoge(Fuga fuga);
}
(1) Geben Sie die Zuordnungslogikklasse an
(2) (3) Geben Sie die Klassenebene der Zuordnungslogikklasse und die Annotation an, die auf Methodenebene im Attribut qualifiziertBy
angegeben ist.
Fuga fuga = new Fuga("abc", "XYZ");
Hoge hoge = HogeFugaMapper.INSTANCE.fugaToHoge(fuga);
System.out.println(hoge.getHoge1()); // ABC
System.out.println(hoge.getHoge2()); // xyz
Nächstes Mal.
Recommended Posts