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