#spring-boot #exception #interface #mapstruct
Вопрос:
Я внедрил интерфейс для использования MapStruct
:
@Mapper(componentModel = "spring")
public interface MapStructMapper {
MapStructMapper INSTANCE = Mappers.getMapper( MapStructMapper.class );
MyApiModel myInternalClassToMyApiModel(MyDocument.MyInternalClass myInternalClass);
MyDocument.MyInternalClass myApiModelToMyInternalClass(MyApiModel myApiModel);
}
При запуске сборки gradle я получаю следующее исключение при выполнении тестов:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'MapStructMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
В моем тестовом классе у меня в настоящее время есть только:
@Autowired
protected MapStructMapper mapper;
и в моем телосложении.
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
Как я могу решить эту проблему и как я могу вызвать сопоставление, если я использую MapStruct с использованием интерфейса?
Комментарии:
1. итак, вы решили эту проблему? столкнувшись с точно такой же проблемой
Ответ №1:
Основываясь на предоставленной вами информации, трудно дать окончательный ответ.
Пожалуйста, убедитесь, что вы включили в свою сборку не только зависимости от mapstruct, но и процессор аннотаций, чтобы MapStructMapperImpl
он был фактически сгенерирован.
Если он действительно создан, вы должны убедиться, что он включен в контекст приложения вашего теста. Если вы используете @SpringBootTest
, вам необходимо убедиться, что интерфейс объявлен в пакете, который сканируется сканированием компонентов. Если вы создадите выделенный контекст @ContextConfiguration
, вам нужно будет указать список MapStructMapperImpl.class
в списке, который вы передадите параметру classes
, как и в случае с другими классами, аннотированными @Component
.