Spring Boot集成MapStruct报错:找不到UserMapper类型Bean
问题描述
我是Spring Boot新手,遇到了Bean找不到的问题。
相关代码
UserService
@RequiredArgsConstructor @Service public class UserService { private final UserRepository userRepository; private final UserMapper userMapper; public UserDto login(CredentialDto credentialDto) { User user = userRepository.findBylogin(credentialDto.login()) .orElseThrow(() -> { ApplicationException ex = new ApplicationException(); ex.setMessage("Unknown user"); return ex; }); return userMapper.toUserDto(user); } }
UserMapper
@Mapper(componentModel = "spring") public interface UserMapper { UserDto toUserDto(User user); }
报错信息
描述:
Parameter 1 of constructor in com.example.jwttest.service.UserService required a bean of type 'com.example.jwttest.mappers.UserMapper' that could not be found.操作建议:
Consider defining a bean of type 'com.example.jwttest.mappers.UserMapper' in your configuration.
解决方案
检查MapStruct依赖是否完整引入
确保项目构建文件(Maven的pom.xml或Gradle的build.gradle)包含MapStruct核心依赖和注解处理器。以Maven为例:<dependencies> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.5.5.Final</version> <!-- 使用最新稳定版 --> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>17</source> <!-- 匹配你的JDK版本 --> <target>17</target> <annotationProcessorPaths> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.5.5.Final</version> </path> <!-- 如果使用Lombok,需添加以下依赖 --> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> </path> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>0.2.0</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>确保Spring能扫描到Mapper接口
如果UserMapper所在包不在Spring Boot启动类的同级或子包下,需要在启动类添加@MapperScan指定Mapper包路径:@SpringBootApplication @MapperScan("com.example.jwttest.mappers") // 替换为你的Mapper实际包路径 public class JwtTestApplication { public static void main(String[] args) { SpringApplication.run(JwtTestApplication.class, args); } }重新编译项目
MapStruct是编译时生成代理类,修改依赖或配置后执行mvn clean compile(Maven)或gradle clean build(Gradle),确保生成了UserMapperImpl实现类。验证Mapper注解正确性
确认@Mapper注解来自org.mapstruct.Mapper包,避免引用其他同名注解。
内容的提问来源于stack exchange,提问作者Ali Raza
相关产品推荐
相关产品推荐

