MapStruct 和 Lombok 兼容性问题:结果类型中的未知属性
问题陈述:
同时使用 MapStruct 和 Lombok 时,会出现错误,指出“未知结果类型中的“属性”。当 MapStruct 由于 Lombok 注释删除了 getter 和 setter 而无法在目标 DTO 类中找到属性时,就会出现此问题。
原因:
Maven 正在使用 MapStruct 处理器,但不是 Lombok 处理器。 Maven 配置中的annotationProcessorPaths 指定应使用哪些处理器。
解决方案:
选项 1:将 Lombok 依赖添加到 AnnotationProcessorPaths
修改 Maven 编译器插件配置以包含 Lombok 和MapStruct 注释处理器:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${org.projectlombok.version}</version> </path> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin>
对于 Lombok 版本 1.18.16 及更高版本,还添加 lombok-mapstruct-binding 依赖项:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>0.2.0</version> </dependency>
选项 2:添加 MapStruct 处理器作为依赖
添加mapstruct-processor依赖项并删除annotationProcessorPaths:
<dependencies> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> </dependency>
附加说明:
为了确保IntelliJ中的注释处理,请将mapstruct-processor添加为提供的依赖项已知问题 (IDEA-150621)。
以上是如何解决 MapStruct 与 Lombok 一起使用时的'未知属性”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!