未找到在上 class 上用 @Named#value 注释的方法

No method found annotated with @Named#value on upper class

我正在使用具有以下依赖性的 mapstruct:

<dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>1.3.0.Final</version>
        </dependency>

        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>1.3.0.Final</version>
            <scope>provided</scope>
        </dependency>

然后我有一个包含基本 @Named 方法的接口:

public interface CommonConverter {
    @Named("formatDateString")
    default String formatDateString(Date date){
        if(date == null){
            return null;
        }
        return DateUtils.formatDateString(date);
    }
    @Named("formatStringDate")
    default Date formatStringDate(String dateStr){
        if(StringUtils.isEmpty(dateStr)){
            return null;
        }
        return DateUtils.formatStringDate(dateStr);
    }

    @Named("convertTimestampToString")
    default String convertTimestampToString(Long date) {
        if (date == null || date.equals(0L)){
            return StringUtils.EMPTY;
        }
        return DateUtils.convertTimeToDateStr(date, 0);
    }
}

现在我有另一个扩展 CommonConverter

的 mapstruct 转换器
@Mapper(componentModel = "spring")
public interface EmployeeEventConverter extends CommonConverter{
    @Mappings({
            @Mapping(source = "claimDate", target = "claimDate", qualifiedByName = "formatDateString"),
            @Mapping(source = "eventStartDate", target = "eventStartDate", qualifiedByName = "formatDateString"),
            //@Mapping(source = "target", target = "targetAsString", qualifiedByName = "formatTargetString"),
            @Mapping(source = "target", target = "targets", qualifiedByName = "convertTarget")
    })
    EmployeeEventClaimDTO toClaimDTO(EmployeeEventClaimDO entity);
    List<EmployeeEventClaimDTO> toClaimDTOs(List<EmployeeEventClaimDO> entities);
}

这个 class 工作正常,直到我升级到 1.4.1.Final ,我在编译项目时遇到了这个异常:

Qualifier error. No method found annotated with @Named#value: [ formatDateString ].

为了克服这个问题,我需要将所有 @Named 复制到 class EmployeeEventConverter(以及许多其他类似的 classes),这会增加 LOC 和重复代码。
任何人都知道为什么会发生以及如何解决它?
谢谢

替代扩展

您可以尝试 Mapper 注释的 uses 属性 而不是 extends

@Mapper(componentModel = "spring", uses = CommonConverter.class )
public interface EmployeeEventConverter

报告 MapStruct 问题

然而,这确实感觉像是 Mapstruct 的问题。 能不能看看用1.4.2.Final版本和1.5.0.RC1版本是不是也有这个问题?如果是这样,请在 https://github.com/mapstruct/mapstruct/issues.

创建一个问题