我使用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
但仍上述例外。我的代码是对这个分支42_RenameCodeBaseToCustomerOnlinePortal github上。该代码非常简单,代码并不多行。唯一的例外是作为RegistrationEndpointIT.java
的一部分生成。
能不能请您看看我要去的地方错了吗?它是利用gradle这个包装。
此外,我跑Application.java当出现以下情况例外:
描述:
在com.rppjs.customer.online.portal.endpoints.RegistrationEndpoint构造函数的参数0所需类型的豆“com.rppjs.customer.online.portal.dtos.mapper.UserMapper”,可能不会被发现。
行动:
考虑配置中的定义类型的豆“com.rppjs.customer.online.portal.dtos.mapper.UserMapper”。
请注意,Application.java是一个春天启动应用程序。
问题是,RegistrationEndpoint
使用映射为构造函数的参数。由于它是一个组件春天要自动装配它。但无论是UserMapper
也不UserMapperImpl
是春天豆,因此例外。
你有两个选择:
UserMapper
构造函数的参数,并得到与Mappers.getMapper(UserMapper.class)
您的映射。最佳实践的研究将是你的映射器里面还有公共MAPPER
实例(见the example here)@Mapper(componentModel = "spring")
@Component
public interface UserMapper() {
//...
}