记录一些遇见的bug——Lombok和Mapstruct的冲突导致,A component required a bean of type ‘com.XXX.controller.converter.
Posted 叶不修233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录一些遇见的bug——Lombok和Mapstruct的冲突导致,A component required a bean of type ‘com.XXX.controller.converter.相关的知识,希望对你有一定的参考价值。
记录一些遇见的bug——Lombok和Mapstruct的冲突导致,A component required a bean of type 'com.XXX.controller.converter.BrandConverter' that could not be found.
一、问题描述
报错截图:
如果你的项目同时使用了Lombok和Mapstruct工具,写了dto转换类,例如下面的BrandConverter转换类
@Component
@Mapper(componentModel = "spring")
public interface BrandConverter
PageInfo<BrandDto> toDto(PageInfo<BrandPo> brandPoPageInfo);
明明为BrandConverter转换类配置了@Component注解,但idea提示:
A component required a bean of type ‘com.XXX.controller.converter.BrandConverter’ that could not be found.
未找到BrandConverter的bean
二、原因和解决方案
由于 MapStruct 依赖于 JavaBean 中有 getter/setter 方法,所以,如果使用了 lombok 来生成 getter/setter 方法的话,那么在配置上有一些特殊的地方:需要 lombok 先对 .class 文件"动手脚",然后 MapStruct 再来对 .class 文件"动手脚"。
我们需要在 maven 项目的 pom.xml 中的 plugins > plugin 下的 maven-compiler-plugin 插件下加上好大一坨 configuration 配置。
如图所示:
<properties>
<org.mapstruct.version>1.5.0.RC1</org.mapstruct.version>
<org.projectlombok.version>1.18.20</org.projectlombok.version>
<lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
... 其它版本声明
</properties>
<dependencies>
<!-- lombok dependencies should not end up on classpath -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>$org.projectlombok.version</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>$org.mapstruct.version</version>
</dependency>
...其它依赖声明
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>$org.mapstruct.version</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>$org.projectlombok.version</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>$lombok-mapstruct-binding.version</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
...其它插件声明
</plugins>
</build>
clean之后重新编译,再次启动,不再报错。
以上是关于记录一些遇见的bug——Lombok和Mapstruct的冲突导致,A component required a bean of type ‘com.XXX.controller.converter.的主要内容,如果未能解决你的问题,请参考以下文章
记录一些遇见的bug——mapstruct和lombok同时使用时,转换实体类时数据丢失问题
记录一些遇见的bug——mapstruct和lombok同时使用时,转换实体类时数据丢失问题
记录一些遇见的bug——关于Lombok的一个大坑,使用@RequestBody接收axios请求对象时,对象所有属性均为null
记录一些遇见的bug——关于Lombok的一个大坑,使用@RequestBody接收axios请求对象时,对象所有属性均为null
记录一些遇见的bug——记录一个使用多线程异步调用openfeign时子线程丢失request请求头导致的空指针异常错误
记录一些遇见的bug——axios请求报500,后端报错com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serial