Mapstruct не может найти импл - PullRequest
0 голосов
/ 04 декабря 2018

Я использую 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 требуется компонент типа 'com.rppjs.customer.online.portal.dtos.mapper.UserMapper', который не найден.

Действие:

Рассмотрите возможность определения bean-компонента типа 'com.rppjs.customer.online.portal.dtos.mapper.UserMapper' в вашей конфигурации.

Обратите внимание, Application.java является загрузочным приложением Spring..

1 Ответ

0 голосов
/ 06 февраля 2019

Проблема в том, что RegistrationEndpoint использует маппер в качестве аргумента конструктора.Поскольку это компонент, Spring хочет его подключить автоматически.Но ни UserMapper, ни UserMapperImpl не являются пружинными компонентами, поэтому существуют исключения.

У вас есть два варианта:

  1. Удалите аргумент конструктора UserMapper и получите вашкартограф с Mappers.getMapper(UserMapper.class).Лучше всего было бы также публиковать MAPPER экземпляр внутри вашего картографа (см. пример здесь )

  2. Если вам нужны автоматические зависимости внутри вашего картографа, вы можете определить свойкартограф как пружинный боб следующим образом:


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