我使用带下面依赖项的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);
}
}
现在我有了另一个mapstruct转换器,它扩展了CommonConverter
@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
之前正常工作,编译项目时得到了这个异常:
Qualifier error. No method found annotated with @Named#value: [ formatDateString ].
为了克服这一问题,我需要将所有@Named
复制到类EmployeeEventConverter
(和许多其他类似的类)中,这会增加LOC和重复代码。
有人知道为什么会发生以及如何解决吗?
谢谢
发布于 2022-04-05 12:38:19
可供选择的扩展
而不是extends
,您可以尝试Mapper
注释的uses
属性。
@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上创建一个问题。
https://stackoverflow.com/questions/71745761
复制相似问题