首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有在上层类上找到带有@Named#value注释的方法

没有在上层类上找到带有@Named#value注释的方法
EN

Stack Overflow用户
提问于 2022-04-05 02:38:18
回答 1查看 1.2K关注 0票数 0

我使用带下面依赖项的mapstruct:

代码语言:javascript
运行
复制
<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方法的接口:

代码语言:javascript
运行
复制
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);
    }
}

现在我有了另一个mapstruct转换器,它扩展了CommonConverter

代码语言:javascript
运行
复制
@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);
}

这个类在升级到1.4.1.Final之前正常工作,编译项目时得到了这个异常:

代码语言:javascript
运行
复制
Qualifier error. No method found annotated with @Named#value: [ formatDateString ].

为了克服这一问题,我需要将所有@Named复制到类EmployeeEventConverter (和许多其他类似的类)中,这会增加LOC和重复代码。

有人知道为什么会发生以及如何解决吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 12:38:19

可供选择的扩展

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

代码语言:javascript
运行
复制
@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上创建一个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71745761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档