ClassNotFoundException для сгенерированного интерфейса MapperJAVA

Программисты JAVA общаются здесь
Anonymous
ClassNotFoundException для сгенерированного интерфейса Mapper

Сообщение Anonymous »

Я испытываю classnotFoundException: AccountMapper при попытке интегрировать MapStruct с Spring Boot 3.5.4. Процессор аннотации Mapstruct правильно генерирует класс реализации, но пружина не может найти интерфейс Mapper во время запуска приложения. @Mapper(componentModel = "spring")
Но боб все еще не может быть найден. Интерфейс существует в исходном коде, успешно компилируется, но кажется недоступным для контекста Spring во время выполнения. /> среда < /strong> < /p>

Spring Boot: 3.5.4 < /li>
mapstruct: 1.5.5.final < /li>
java: 21 < /li>
maven: 3.x build < /li>
< /ul> Детали

Caused by: java.lang.ClassNotFoundException: AccountMapper
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:528)
< /code>
Description:

Field accountMapper in com.demo.demo.service.AccountService required a bean of type 'com.demo.demo.mapper.AccountMapper' that could not be found.

Action:

Consider defining a bean of type 'com.demo.demo.mapper.AccountMapper' in your configuration.

2025-08-16T13:57:58.031-05:00 WARN 60525 --- [finance-core-service] [ main] o.s.test.context.TestContextManager : Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [com.demo.demo.FinanceCoreServiceApplicationTests@7f72855d]

< /code>
Class, Interfaces and POM
MapStruc

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingConstants;
import com.demo.finance_core_service.dto.AccountBaseDTO;
import com.demo.finance_core_service.model.Account;

// Also tried: @Mapper(componentModel = MappingConstants.ComponentModel.SPRING)

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

@Mapping(target = "accountId", ignore = true)
@Mapping(target = "transactions", ignore = true)
Account toEntity(AccountBaseDTO dto);

AccountBaseDTO toDto(Account entity);
}
< /code>
Generated Mapper Implementation
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2025-08-16T13:52:56-0500",
comments = "version: 1.5.5.Final, compiler: javac, environment: Java 23.0.1"
)
@Component
public class AccountMapperImpl implements AccountMapper {
// Implementation code...
}
< /code>
Service
@Service
public class AccountService {

@Autowired
private AccountRepository accountRepository;

@Autowired
private AccountMapper accountMapper; // Bean not found

@Transactional
public Account createAccount(AccountBaseDTO newAccount) {
Account account = accountMapper.toEntity(newAccount);
return accountRepository.save(account);
}
}
< /code>
Pom.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0


org.springframework.boot
spring-boot-starter-parent
3.5.4



com.demo
finance-core-service
0.0.1-SNAPSHOT
demo
demo


21
1.5.5.Final
1.18.38





org.springframework.boot
spring-boot-starter-actuator


org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-webflux


org.springframework.boot
spring-boot-starter-data-jpa


org.springframework.boot
spring-boot-starter-validation




com.h2database
h2
runtime


org.postgresql
postgresql
runtime




org.springdoc
springdoc-openapi-starter-webmvc-ui
2.5.0




org.projectlombok
lombok
${lombok.version}
provided




org.mapstruct
mapstruct
${mapstruct.version}




org.springframework.boot
spring-boot-starter-test
test






org.apache.maven.plugins
maven-compiler-plugin



org.projectlombok
lombok
${lombok.version}


org.projectlombok
lombok-mapstruct-binding
0.2.0


org.mapstruct
mapstruct-processor
${mapstruct.version}



-Amapstruct.defaultComponentModel=spring





org.springframework.boot
spring-boot-maven-plugin





< /code>
I also tried to manually register the mapper as a @Bean. But it did not fix the issue.

@Configuration
public class MapperConfig {

@Bean
public AccountMapper accountMapper() {
return new AccountMapperImpl();
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... -interface

Вернуться в «JAVA»