[JAVA] Cartographie Bean avec MapStruct Partie 3

Continuation de la dernière fois

http://qiita.com/kentama/items/09a8573bd5d0831b470e http://qiita.com/kentama/items/55c71ca28f0c5af8d4ed

Conversion de type et mise en forme

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
}

Créer un mappeur

@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.

Courir

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

Conversion de type de liste

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.

Créer un mappeur

@Mapper
public interface ConversionMapper {
    ConversionMapper INSTANCE = Mappers.getMapper(ConversionMapper.class);

    @IterableMapping(numberFormat = "000")
    List<String> zeroPadding(List<Integer> numbers);
}

Courir

List<String> numbers = ConversionMapper.INSTANCE.zeroPadding(Arrays.asList(1, 2, 56, 76, 863));
System.out.println(numbers); // [001, 002, 056, 076, 863]

Réutilisation du mappeur

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
}

Créer un mappeur

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`.

Courir

Fuga fuga = new Fuga(LocalDate.of(2017, 4, 1));
Hoge hoge = InvokingOtherMapper.INSTANCE.fugaToHoge(fuga);

System.out.println(hoge.getDate()); //01 avril 2017

Utilisation du qualificatif

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
}

Créer une logique de mappage

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();
    }
}

Créer des annotations

@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 {
}

Annotation

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();
    }
}

Créer un mappeur

@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.

Courir

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

Cartographie Bean avec MapStruct Partie 3
Cartographie de Bean avec MapStruct Partie 2
Effectuer une cartographie de bean à grande vitesse à l'aide de MapStruct
Copie de bean à l'aide de MapStruct
Utilisez Fast Mapping Livery MapStruct avec Lombok et Java 11
Java pour apprendre avec les ramen [Partie 1]
Test de l'API REST à l'aide de REST Assured Part 2
Bean mapping utile dans Java ModelMapper
Ajouter une validation de bean avec Micronaut (Java)
Contrôle d'entrée facile avec Bean Validation!
Traitement serveur avec Java (Introduction partie 1)
Réintroduction aux opérateurs avec RxJava Partie 1