Mapstruct找不到隐含

时间:2018-12-04 07:13:58

标签: java spring-boot mapstruct

我正在使用mapstruct将DTO转换为对象,反之亦然,并且出现以下异常:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.rppjs.customer.online.portal.dtos.mapper.UserMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1506)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:819)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:725)

我可以看到正在生成UserMapper.impl,但仍然是上述异常。我的代码在github上此分支42_RenameCodeBaseToCustomerOnlinePortal上。该代码非常简单,并且没有多少行代码。异常是作为RegistrationEndpointIT.java的一部分生成的。

请你看看我要去哪里错了吗?它正在使用gradle包装器。

此外,运行Application.java时出现以下异常:

  

说明:

     

构造函数的参数0   com.rppjs.customer.online.portal.endpoints.RegistrationEndpoint   需要一个类型的bean   'com.rppjs.customer.online.portal.dtos.mapper.UserMapper'   找不到。

     

操作:

     

考虑定义一个类型的bean   您的'com.rppjs.customer.online.portal.dtos.mapper.UserMapper'   配置。

请注意,Application.java是Spring引导应用程序。

1 个答案:

答案 0 :(得分:0)

问题在于RegistrationEndpoint使用映射器作为构造函数参数。由于它是Spring想要自动装配的组件。但是UserMapperUserMapperImpl都不是Spring bean,因此是例外。

您有两个选择:

  1. 删除UserMapper构造函数参数,并使用Mappers.getMapper(UserMapper.class)获取映射器。最好的方法是在映射器中也公开MAPPER实例(请参见the example here

  2. 如果需要在映射器内部自动关联依赖项,则可以将映射器定义为spring bean,如下所示:


@Mapper(componentModel  = "spring")
@Component
public interface UserMapper() {
   //...
}