找不到带@named#value注解的方法

sauutmhj  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(4666)

当我尝试实现自己的Map时,使用mapstruct版本1.4.1时遇到问题。这是我写的代码:

  1. package com.kucazdravlja.user.mappers;
  2. import com.kucazdravlja.user.dto.NoticeBoardDto;
  3. import com.kucazdravlja.user.entities.NoticeBoard;
  4. import com.kucazdravlja.user.entities.NoticeBoardStatus;
  5. import org.mapstruct.Mapper;
  6. import org.mapstruct.Mapping;
  7. import org.mapstruct.Named;
  8. import java.util.Objects;
  9. @Mapper(uses = {BaseJournalMapper.class})
  10. public interface NoticeBoardMapper {
  11. @Mapping(source = "status", target = "status", qualifiedByName = "getNoticeBoardStatusName")
  12. NoticeBoard dtoToEntity(NoticeBoardDto noticeBoardDto);
  13. @Mapping(source = "status", target = "status", qualifiedByName = "getNoticeBoardStatusDescription")
  14. NoticeBoardDto entityToDto(NoticeBoard noticeBoard);
  15. @Named("getNoticeBoardStatusDescription")
  16. static String getNoticeBoardStatusDescriptionConverter(NoticeBoard noticeBoard) {
  17. return Objects.requireNonNull(NoticeBoardStatus.findByName(noticeBoard.getStatus())).getDescription();
  18. }
  19. @Named("getNoticeBoardStatusName")
  20. static String getNoticeBoardStatusNameConverter(NoticeBoardDto noticeBoardDto) {
  21. return Objects.requireNonNull(NoticeBoardStatus.findByName(noticeBoardDto.getStatus())).name();
  22. }
  23. }

当运行应用程序时,它崩溃并给出错误消息

  1. Error:(15, 5) java: Qualifier error. No method found annotated with @Named#value: [ getNoticeBoardStatusName ].

不知道是什么问题,因为我有这个名字的方法。

p4rjhz4m

p4rjhz4m1#

在你的 @Mapping 注解,您告诉mapstruct使用字段“status”作为Map的源。但是这些方法 NoticeBoard 以及 NoticeBoardDto 作为参数。您需要将参数类型更改为 status 是。假设是字符串:

  1. @Named("getNoticeBoardStatusName")
  2. default String getNoticeBoardStatusNameConverter(String status) {
  3. return Objects.requireNonNull(NoticeBoardStatus.findByName(status)).name();
  4. }

另外,不要在Map器中使用静态方法,请使用 default 改为关键字。

相关问题