MapStruct:当由@Named 注释时,列表映射不使用单个映射

MapStruct: List mapping is not using single mapping when annotated by @Named

我有以下映射器

@Mapper
@Named("RoleBaseMapper")
public interface RoleBaseMapper {

    @Mapping(target = "code", source = "name")
    @Named("mapToBase")
    RoleGuiBaseDto mapToBase(Role role);

    @Named("MapListToBase")
    List<RoleGuiBaseDto> mapListToBase(List<Role> roles);
}

我期望 mapListToBase 将使用 mapToBase 映射列表中的每个条目。但是当我看到生成的代码时,我有以下

@Override
public List<RoleGuiBaseDto> mapListToBase(List<Role> roles) {
    if ( roles == null ) {
        return null;
    }

    List<RoleGuiBaseDto> list = new ArrayList<RoleGuiBaseDto>( roles.size() );
    for ( Role role : roles ) {
        list.add( roleToRoleGuiBaseDto( role ) );
    }

    return list;
}

protected RoleGuiBaseDto roleToRoleGuiBaseDto(Role role) {
    if ( role == null ) {
        return null;
    }

    RoleGuiBaseDto roleGuiBaseDto = new RoleGuiBaseDto();

    roleGuiBaseDto.setId( role.getId() );
    roleGuiBaseDto.setDescription( role.getDescription() );

    return roleGuiBaseDto;
}

创建并使用了一个新的映射器方法,而不是使用 mapToBase

如何告诉 mapListToBase 使用 mapToBase

注意:没有 @Named.

一切正常

使用@Named时需要限定映射方法(使用@IterableMapping#qualifiedByName):

@Mapper
@Named("RoleBaseMapper")
public interface RoleBaseMapper {

    @Mapping(target = "code", source = "name")
    @Named("mapToBase")
    RoleGuiBaseDto mapToBase(Role role);

    @IterableMapping(qualifiedByName = "mapToBase")
    @Named("MapListToBase")
    List<RoleGuiBaseDto> mapListToBase(List<Role> roles);
}