Continuation de la dernière fois
http://qiita.com/kentama/items/09a8573bd5d0831b470e http://qiita.com/kentama/items/55c71ca28f0c5af8d4ed
La conversion de type peut être effectuée au moment du mappage comme int-> String. À ce moment-là, le format peut également être spécifié.
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 = "aaaa année MM mois jj jour") // (1)
@Mapping(target = "number", source = "number", numberFormat = "#,###") // (2)
Hoge convert(Fuga fuga);
}
(1) Spécifiez le format de la date dans l'attribut dateFormat.
(2) Spécifiez le format numérique dans l'attribut numberFormat.
Fuga fuga = new Fuga(LocalDate.of(2017, 4, 1), 1234567890);
Hoge hoge = ConversionMapper.INSTANCE.convert(fuga);
System.out.println(hoge.getDate()); //01 avril 2017
System.out.println(hoge.getNumber()); // 1,234,567,890
Vous pouvez également taper-convertir une liste en utilisant @ IterableMapping.
Cette fois, int-> String est converti et 3 chiffres sont complétés par des zéros.
@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]
Vous pouvez utiliser un autre Mapper de Mapper. Vous pouvez spécifier un mappeur généré par MapStruct ou un mappeur implémenté indépendamment.
Bean
public class Hoge {
private String date;
// constructor/getter/setter
}
public class Fuga {
private LocalDate date;
// constructor/getter/setter
}
Cette fois, créez votre propre mappeur pour la conversion LocalDate-> String et réutilisez-le.
Cartographe original
public class LocalDateMapper {
public String asString(LocalDate date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("aaaa année MM mois jj jour");
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) Spécifiez le mappeur à réutiliser dans l'attribut ʻuses`.
Fuga fuga = new Fuga(LocalDate.of(2017, 4, 1));
Hoge hoge = InvokingOtherMapper.INSTANCE.fugaToHoge(fuga);
System.out.println(hoge.getDate()); //01 avril 2017
Vous pouvez ajouter une annotation à votre propre logique de mappage afin que Mapper puisse utiliser votre propre logique de mappage. Ici, à titre d'exemple, le mappage pour convertir en majuscules et minuscules est effectué.
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 {
}
Ajoutez l'annotation créée à la logique de mappage.
@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) Spécifiez la classe logique de mappage
(2) (3) Spécifiez le niveau de classe de la classe logique de mappage et l'annotation spécifiée au niveau de la méthode dans l'attribut qualBy.
Fuga fuga = new Fuga("abc", "XYZ");
Hoge hoge = HogeFugaMapper.INSTANCE.fugaToHoge(fuga);
System.out.println(hoge.getHoge1()); // ABC
System.out.println(hoge.getHoge2()); // xyz
La prochaine fois.
Recommended Posts