2 votes

MapStruct utilise les mappings d'une méthode vers une autre méthode ayant un type de retour d'une classe inhérente.

J'ai commencé à utiliser MapStruct récemment et j'ai eu ce doute. Est-il possible d'hériter des mappings d'une méthode dans une autre méthode qui est utilisée pour mapper une sous-classe de la sortie de la méthode précédente ?

Par exemple, si j'ai une classe Car qui doit être convertie en deux classes FourWheeler et DetailedFourWheeler (qui étend la classe FourWheeler), puis-je utiliser les mappings définis pour la conversion de Car en FourWheeler dans ma méthode qui convertit Car en DetailedFourWheeler ? Voici l'exemple de code

@lombok.Data
public class Car {
    private String color;
    private String brand;
    private String variant;
}

@lombok.Data
public class FourWheeler {
    private String paint;
    private String company;
}

@lombok.Data
public class DetailedFourWheeler extends FourWheeler {
    private String model;
}

Mon mappeur pour cela ressemble à -

@Mapper
interface FourWheelerMapper {

    public static final FourWheelerMapper INSTANCE = Mappers.getMapper(FourWheelerMapper.class);

    @Mappings({
            @Mapping(source = "color", target = "paint"),
            @Mapping(source = "brand", target = "company")
    })
    FourWheeler mapToFourWheeler(Car car);

    @Mappings({
            @Mapping(source = "color", target = "paint"),
            @Mapping(source = "brand", target = "company"),
            @Mapping(source = "variant", target = "model")
    })
    DetailedFourWheeler mapToDetailedFourWheeler(Car car);
}

Je veux savoir s'il est possible de changer la mapToDetailedFourWheeler comme -.

@InheritMappingsFromParent
@Mappings({
    @Mapping(source = "variant", target = "model")
})
DetailedFourWheeler mapToDetailedFourWheeler(Car car);

Ici, mon InheritMappingsFromParent devrait apporter les mappings pour la couleur et la marque de la méthode précédente.

Je n'ai pas réussi à trouver quelque chose à ce sujet dans la documentation. Merci

1voto

Filip Points 2959

MapStruct possède l'attribut @InheritConfiguration annotation qui fera ce que vous recherchez. Jetez un coup d'œil à Héritage de la configuration du mappage dans la documentation pour plus d'informations.

En tout cas, pour vous, cela ne fonctionnera pas si DetailedFourWheeler ne s'étend pas FourWheeler car sans cela, MapStruct n'a aucun moyen de savoir que les types sont liés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X