Mapstruct extension contenant plusieurs interfaces procédé avec la même signature

Pashchenko Denis:

J'utilise 2 bibliothèques dans mon projet qui nécessitent cartographes avec les différentes interfaces:

public interface FirstLibraryMapper<T, M> {

    M mapToDto(T domain);

    List<M> mapToDto(List<T> domains);

}

public interface SecondLibraryMapper<T, M> {

    M mapToDto(T domain);

}

Je veux créer un seul grain de mappeur en utilisant mapstruct qui sera injecté dans les bibliothèques de composants par l'interface, car les deux interfaces ont une méthode avec la signature exacte:

@Mapper
public interface MyMapper extends FirstLibraryMapper<MyDomain, MyDto>, SecondLibraryMapper<MyDomain, MyDto> {

}

Quand je tente de compiler, je reçois cette erreur:

Ambiguous mapping methods found for mapping collection element to MyDto: MyDto mapToDto(MyDomain arg0), MyDto mapToDto(MyDomain arg0).

Je suis en mesure de contourner ce problème en utilisant @Named et @IterableMapping mais il se sent mal et maladroit. Pourquoi ne peut-mapstruct processeur ignorer la deuxième méthode si elle a une signature exacte que le premier? Dois-je monter un problème sur leur page GitHub? Ou je me trompe dans ce cas?

Pashchenko Denis:

Problème résolu par la redéfinition de méthode dans le résultat mappeur qui est encore un peu maladroit, mais semble faire l'affaire.

@Mapper
public interface MyMapper extends FirstLibraryMapper<MyDomain, MyDto>, SecondLibraryMapper<MyDomain, MyDto> {

    @Override
    MyDto mapToDto(MyDomain domain);

}

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=478287&siteId=1
conseillé
Classement