J'ai récemment choisi MapStruct, et j'aime beaucoup son fonctionnement. Depuis que je suis nouveau à MapStruct, je m'excuse d'avance si cette question est stupide ou n'a pas de sens.Est-il possible que MapStruct détecte automatiquement les mappages pour les collections contenant des types génériques en tant que source et cible?
En raison de la version du serveur, je suis lié à Java 6.
J'ai 3 types d'entités, A, B et C, ainsi que leurs homologues DTO.
public class A{
//...
}
public class B extends A{
//...
}
public class C extends A{
//...
}
public class ADto{
//...
}
public class BDto extends ADto{
//...
}
public class CDto extends ADto{
//...
}
Mon mappeur définit:
public abstract ADto mapAToADto(A source);
public abstract A mapADtoToA(ADto source);
public abstract BDto mapBToBDto(B source);
public abstract B mapBDtoToB(BDto source);
public abstract CDto mapCToCDto(C source);
public abstract C mapCDtoToC(CDto source);
Ce qui fonctionne très bien pour l'instant. Dans mon application, je travaille avec List<A>
et List<ADto>
qui contient les deux sous-types.
Ma mise en œuvre actuelle consistait à implémenter ma propre méthode de mappage qui itère sur la liste source et vérifie les types avec instanceof
, puis appelle la méthode de mappage correspondante répertoriée ci-dessus.
mise en œuvre actuelle:
public <T extends ADto, S extends A> List<T> toList(List<S> source) {
if (source == null) {
return null;
}
List<T> list = new ArrayList<T>();
for (S entity : source) {
if (entity instanceof B) {
list.add((T) mapBToBDto((B) entity));
} else if (entity instanceof C) {
list.add((T) mapCToCDto((C) entity));
} else {
list.add((T) mapADtoToA((A) entity));
}
}
return list;
};
Je me demandais s'il y a un moyen de diriger MapStruct pour comprendre automatiquement. Est-ce que je manque quelque chose?
Edit: Mon approche optimiste était avec:
@IterableMapping(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL)
public abstract <T extends ADto, S extends A> List<T> listAToADto(List<S> source);
qui se traduit par:
Impossible de générer la méthode de mise en correspondance pour une variable cible type générique
Merci
Tout ce que je voulais savoir, merci. –