Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MapStruct using interface with Spring Boot causes NoSuchBeanDefinitionException

I have implemnted an interface for using MapStruct:

@Mapper(componentModel = "spring")
public interface MapStructMapper {

    MapStructMapper INSTANCE = Mappers.getMapper( MapStructMapper.class );

    MyApiModel myInternalClassToMyApiModel(MyDocument.MyInternalClass myInternalClass);
    MyDocument.MyInternalClass myApiModelToMyInternalClass(MyApiModel myApiModel);
}

When running the gradle build I get the following exception when tests are executed:

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)}

In my test class I currently have only:

@Autowired
protected MapStructMapper mapper;

and in my build.gradle

implementation 'org.mapstruct:mapstruct:1.4.2.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'

How can I solve this problem and how can I invoke the mapping if I use MapStruct using an interface?

like image 683
du-it Avatar asked Mar 06 '26 02:03

du-it


1 Answers

Based on the information you provided, it's hard to give a definitive answer.

Please check that you not only included the mapstruct dependencies but also the annotation processor in your build such that the MapStructMapperImpl is actually generated.

If it is indeed generated, you must make sure that it is included in the application context of your test. If you use @SpringBootTest, you need to make sure that the interface is declared in a package that is scanned by the component scan. If you construct a dedicated context with @ContextConfiguration, you need to list MapStructMapperImpl.class in the list that you pass to the parameter classes like you would with other classes annotated with @Component.

like image 145
Henning Avatar answered Mar 07 '26 22:03

Henning



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!