Mapstruct找不到IMPL

问题描述 投票:0回答:1

我使用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是一个春天启动应用程序。

java spring-boot mapstruct
1个回答
0
投票

问题是,RegistrationEndpoint使用映射为构造函数的参数。由于它是一个组件春天要自动装配它。但无论是UserMapper也不UserMapperImpl是春天豆,因此例外。

你有两个选择:

  1. 取下UserMapper构造函数的参数,并得到与Mappers.getMapper(UserMapper.class)您的映射。最佳实践的研究将是你的映射器里面还有公共MAPPER实例(见the example here
  2. 如果您需要映射器内自动装配Autowired依赖关系可以定义为映射像春天豆如下:

@Mapper(componentModel  = "spring")
@Component
public interface UserMapper() {
   //...
}
© www.soinside.com 2019 - 2024. All rights reserved.