找不到用@Named#value 注释的方法
No method found annotated with @Named#value
当我尝试实现自己的映射时,我在使用 MapStruct 版本 1.4.1 时遇到了问题。这是我写的代码:
package com.kucazdravlja.user.mappers;
import com.kucazdravlja.user.dto.NoticeBoardDto;
import com.kucazdravlja.user.entities.NoticeBoard;
import com.kucazdravlja.user.entities.NoticeBoardStatus;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import java.util.Objects;
@Mapper(uses = {BaseJournalMapper.class})
public interface NoticeBoardMapper {
@Mapping(source = "status", target = "status", qualifiedByName = "getNoticeBoardStatusName")
NoticeBoard dtoToEntity(NoticeBoardDto noticeBoardDto);
@Mapping(source = "status", target = "status", qualifiedByName = "getNoticeBoardStatusDescription")
NoticeBoardDto entityToDto(NoticeBoard noticeBoard);
@Named("getNoticeBoardStatusDescription")
static String getNoticeBoardStatusDescriptionConverter(NoticeBoard noticeBoard) {
return Objects.requireNonNull(NoticeBoardStatus.findByName(noticeBoard.getStatus())).getDescription();
}
@Named("getNoticeBoardStatusName")
static String getNoticeBoardStatusNameConverter(NoticeBoardDto noticeBoardDto) {
return Objects.requireNonNull(NoticeBoardStatus.findByName(noticeBoardDto.getStatus())).name();
}
}
当 运行 应用程序崩溃并给出错误
Error:(15, 5) java: Qualifier error. No method found annotated with @Named#value: [ getNoticeBoardStatusName ].
不确定是什么问题,因为我有那个名称的方法。
在您的 @Mapping
注释中,您告诉 mapstruct 使用字段“status”作为映射的源。但是这些方法将 NoticeBoard
和 NoticeBoardDto
作为参数。您需要将参数类型更改为 status
的任何类型。假设它是字符串:
@Named("getNoticeBoardStatusName")
default String getNoticeBoardStatusNameConverter(String status) {
return Objects.requireNonNull(NoticeBoardStatus.findByName(status)).name();
}
此外,不要在映射器中使用静态方法,而是使用 default
关键字。
当我尝试实现自己的映射时,我在使用 MapStruct 版本 1.4.1 时遇到了问题。这是我写的代码:
package com.kucazdravlja.user.mappers;
import com.kucazdravlja.user.dto.NoticeBoardDto;
import com.kucazdravlja.user.entities.NoticeBoard;
import com.kucazdravlja.user.entities.NoticeBoardStatus;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import java.util.Objects;
@Mapper(uses = {BaseJournalMapper.class})
public interface NoticeBoardMapper {
@Mapping(source = "status", target = "status", qualifiedByName = "getNoticeBoardStatusName")
NoticeBoard dtoToEntity(NoticeBoardDto noticeBoardDto);
@Mapping(source = "status", target = "status", qualifiedByName = "getNoticeBoardStatusDescription")
NoticeBoardDto entityToDto(NoticeBoard noticeBoard);
@Named("getNoticeBoardStatusDescription")
static String getNoticeBoardStatusDescriptionConverter(NoticeBoard noticeBoard) {
return Objects.requireNonNull(NoticeBoardStatus.findByName(noticeBoard.getStatus())).getDescription();
}
@Named("getNoticeBoardStatusName")
static String getNoticeBoardStatusNameConverter(NoticeBoardDto noticeBoardDto) {
return Objects.requireNonNull(NoticeBoardStatus.findByName(noticeBoardDto.getStatus())).name();
}
}
当 运行 应用程序崩溃并给出错误
Error:(15, 5) java: Qualifier error. No method found annotated with @Named#value: [ getNoticeBoardStatusName ].
不确定是什么问题,因为我有那个名称的方法。
在您的 @Mapping
注释中,您告诉 mapstruct 使用字段“status”作为映射的源。但是这些方法将 NoticeBoard
和 NoticeBoardDto
作为参数。您需要将参数类型更改为 status
的任何类型。假设它是字符串:
@Named("getNoticeBoardStatusName")
default String getNoticeBoardStatusNameConverter(String status) {
return Objects.requireNonNull(NoticeBoardStatus.findByName(status)).name();
}
此外,不要在映射器中使用静态方法,而是使用 default
关键字。