Yo uso 2 bibliotecas en mi proyecto que requieren creadores de mapas con las diferentes 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);
}
Quiero crear un solo grano de asignador usando mapstruct que se inyecta en los componentes de las bibliotecas de interfaz, ya que ambas tienen un método con la firma exacta:
@Mapper
public interface MyMapper extends FirstLibraryMapper<MyDomain, MyDto>, SecondLibraryMapper<MyDomain, MyDto> {
}
Cuando intento compilar, obtengo este error:
Ambiguous mapping methods found for mapping collection element to MyDto: MyDto mapToDto(MyDomain arg0), MyDto mapToDto(MyDomain arg0).
Yo era capaz de evitar este problema utilizando @Named y @IterableMapping pero se siente mal y torpe. ¿Por qué no se puede ignorar el procesador mapstruct el segundo método si tiene una firma exacta como la primera? Debería elevarse un problema en su página de GitHub? O estoy mal en ese caso?
Problema resuelto reemplazando método en el resultado asignador de que sigue siendo un torpe poco, pero parece hacer el truco.
@Mapper
public interface MyMapper extends FirstLibraryMapper<MyDomain, MyDto>, SecondLibraryMapper<MyDomain, MyDto> {
@Override
MyDto mapToDto(MyDomain domain);
}