You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 21中MapStruct生成的实现类为空问题求助

MapStruct生成空实现类的排查方案

1. 版本兼容性问题

你的项目使用Java 21 + MapStruct 1.5.5.Final,该版本的MapStruct对Java 21的支持有限,建议升级MapStruct到1.6.0.Final及以上(此版本开始正式支持Java 21)。同时需确保Lombok版本与MapStruct兼容,比如使用Lombok 1.18.26+。

2. 构建工具注解处理器配置缺失

MapStruct和Lombok均依赖注解处理器,若未在构建脚本中明确配置,会导致MapStruct无法读取Lombok生成的getter/setter,进而生成空实现。

Maven配置示例

在pom.xml中补充以下配置:

<properties>
    <mapstruct.version>1.6.0.Final</mapstruct.version>
    <lombok.version>1.18.30</lombok.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${mapstruct.version}</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version> <!-- 支持Java 21的版本 -->
            <configuration>
                <source>21</source>
                <target>21</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${mapstruct.version}</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                    <!-- 添加Lombok与MapStruct的绑定依赖 -->
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok-mapstruct-binding</artifactId>
                        <version>0.2.0</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

Gradle配置示例

在build.gradle中补充以下配置:

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.0'
    id 'io.spring.dependency-management' version '1.1.4'
    id 'io.freefair.lombok' version '8.4' // 自动处理Lombok注解
}

dependencies {
    implementation 'org.mapstruct:mapstruct:1.6.0.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.6.0.Final'
    annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
}

java {
    sourceCompatibility = JavaVersion.VERSION_21
    targetCompatibility = JavaVersion.VERSION_21
}

3. IDE注解处理器未启用

若使用IntelliJ IDEA,需检查以下设置:

  • 开启Settings > Build, Execution, Deployment > Compiler > Annotation Processors中的Enable annotation processing选项
  • 清理IDE缓存:执行File > Invalidate Caches...,重启IDE后重新执行构建命令(mvn clean install或gradle clean build)

4. 验证Lombok注解生效情况

MapStruct依赖实体类和DTO的getter/setter完成映射,若Lombok未生成这些方法,会导致映射逻辑为空。可通过以下方式验证:

  • 查看编译后的Country.class和CountryDto.class文件,确认是否存在getId()、getFrenchName()等getter方法,以及对应的setter方法
  • 若没有生成,需检查IDE是否安装Lombok插件,构建配置是否正确引入Lombok依赖

内容的提问来源于stack exchange,提问作者Fizik26

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:53:06