Bernado
Bernado

Reputation: 628

mapstruct 1.3.1FINAL: @Mapper(componentModel = "spring") doesn't support custom bean name references mapstruct/mapstruct#1427

My problem references to this issue here on github https://github.com/mapstruct/mapstruct/issues/1427

I got at least two versions of mappers with the same name. I want to use springs getBean/Autowired possibilities but this doesn't work out of the mapstructs box yet. :-)

I followed the second workaround mentioned in the upper link: extend Springs bean naming strategy. Did someone ever get this well ment proposal working?

If i follow the code parts from there the bean naming doesn't take place. For me its's clear why not: there aren't any components to scan and especially to find.

If i add a componenModel = "spring" to the mapper annotation i get a ConflictingBeanDefinitionException. Don't know why. Maybe there's a cat in the tail problem?

Upvotes: 1

Views: 1396

Answers (2)

Bernado
Bernado

Reputation: 628

As stated from Filip here https://github.com/mapstruct/mapstruct/issues/1427 i followed his approach and with a few modifications it worked. I added a solution comment in the link.

The main changes are:

  1. i added componentModel = "spring" to my mappers and used a filter to exclude all of my mapper classes (the interface all of my mappers are implementing: MapperInterface.class) within the Spring Boot application.

  2. To my Spring Boot application class i added:

    @ComponentScan(basePackages = { "com.application.spring_boot_class" }, excludeFilters = { @ComponentScan.Filter(value = { MapperInterface.class }, type = FilterType.ASSIGNABLE_TYPE) })

Upvotes: 2

Ismail
Ismail

Reputation: 3022

I had this issue before, and I resolved it using the Spring bean definition in a configuration class, a class annotated with @Configuration, with the Mapstruct mapper call like below:

@Bean
public IMyMapper offerWebMapper() {
    return Mappers.getMapper(IMyMapper.class);
}

And then you can inject the mapper using @Autowired or getBean.

Upvotes: 1

Related Questions