当前位置: 首页 > 知识库问答 >
问题:

无法用spring componentModel为修饰的MapStruct映射器创建bean

慕晨
2023-03-14

我目前正在用Spring componentModel设置一个MapStruct映射器,到目前为止一切都很好,各个子映射器可以按照预期进行自动注入。但是,在加载ApplicationContext时,使用修饰映射器会导致以下失败:

创建名为“Example MapperImpl”的bean时出错:通过构造函数参数0表示不满足的依赖关系;嵌套异常是org.springframework.beans.factory.NosuchBeanDefinitionException:没有类型为“...ExampleMapper”的合格bean可用:至少需要1个符合autowire候选的bean。依赖项注释:{@org.springframework.beans.factory.annotation.qualifier(value=“delegate”)}

@Mapper(componentModel = "spring",
        uses = GenericMapper.class,
        injectionStrategy = InjectionStrategy.CONSTRUCTOR)
@DecoratedWith(ExampleMapperDecorator.class)
public interface ExampleMapper {

    ...

}


public abstract class ExampleMapperDecorator implements ExampleMapper {

    @Autowired
    @Qualifier("delegate")
    private ExampleMapper delegate;

    ...

}
@SpringBootTest(classes = {
        ExampleMapperImpl.class,
        GenericMapperImpl.class
})
class ExampleMapperTest {

    @Autowired
    private ExampleMapper underTest;

    ...

}
@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2021-05-26T15:44:17+0200",
    comments = "version: 1.4.2.Final, compiler: javac, environment: Java 13.0.2 (Oracle Corporation)"
)
@Component
@Primary
public class ExampleMapperImpl extends ExampleMapperDecorator implements OrderingMapper {

    private final ExampleMapper delegate;

    @Autowired
    public ExampleMapperImpl(@Qualifier("delegate") ExampleMapper delegate) {

        this.delegate = delegate;
    }

    ...
}

共有1个答案

史昊焱
2023-03-14

我终于设法解决了这个问题。对于修饰映射器,除了ExampleMapperImpl之外,还会生成一个额外的类ExampleMapperImpl_,该类也必须包含在SpringBootTest注释中。

@SpringBootTest(classes = {
        ExampleMapperImpl.class,
        ExampleMapperImpl_.class,
        GenericMapperImpl.class
})
 类似资料:
  • 按照第二个链接中包含的示例,我已经测试了: 但我没有实现使用。

  • 我正在使用MapStruct从一个JPA实体映射到一个POJO DTO,在一个带有依赖项注入的Spring应用程序中。 ...并且从不为集合中的项调用修饰方法。 有没有一种方法可以让Mapstruct在集合映射中使用decorator方法,而不是在我的decorator中手动编写集合方法(这种方法很有效,但很冗长,并且违背了Mapstruct最初的目的,即不必编写这种代码)?

  • 我正在尝试创建弹性贴图 但我得到以下错误: [mapper_parsing_exception][agent_id]的映射定义有不受支持的参数:[field ddata: true]

  • 问题内容: 我正在使用MapStruct库映射对象,但出现此错误: 无法将属性“ java.util.Date aDate”映射到“ javax.xml.bind.JAXBElement ADATE”。考虑声明/实现一个映射方法:“ javax.xml.bind.JAXBElement map(java.util.Date value)”。 我的问题:应该在哪里取消此映射方法? 问题答案: 我通过

  • 是否可能在MapStruct中使用不同的映射器?我有这个映射器 是否可以将此实现更改为MapStruct?

  • 我有麻烦映射一个嵌套dto字段正确与MapStruct。我有几个DTO: 具有相应的映射器 到目前为止,一切工作都很好,生成的代码自动连接其他需要的映射器来正确地构建DTO。例如生成的仪器映射器实现 现在,当我试图创建一个包含嵌套工具dto的映射器时遇到了麻烦。映射器应使用instrumentMapper正确创建所需的dto。DTO: 映射器: 生成的代码: 现在media mapper得到了很好