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

Mapstruct 1.2.0升级1.4.2兼容问题及Lombok @With注解相关问题咨询

MapStruct 1.2.0升级1.4.2兼容性问题解决方案

以下针对你遇到的两处兼容性问题分别给出解决方案:

问题1:映射源无法识别setter方法、要求属性真实存在

MapStruct从1.3版本开始调整了默认的属性扫描规则,默认不再将setter方法识别为合法的映射源,要求映射对应的属性必须为类中真实存在的字段。
解决方式如下:

  • 全局兼容方案:添加编译参数 -Amapstruct.allowSetterAsSource=true,开启setter方法作为映射源的支持,完全兼容1.2.0版本的旧逻辑。
  • 单Mapper兼容方案:如果仅个别Mapper用到了setter作为映射源,可在对应的@Mapper注解中配置unmappedSourcePolicy = ReportingPolicy.IGNORE,忽略源属性不存在的报错。

问题2:Lombok @With注解导致需要新增大量映射规则

Lombok的@With注解会生成withXXX前缀的方法,符合MapStruct默认的访问器方法识别规则,因此MapStruct会将这些方法识别为属性的存取方法,进而要求你补充对应的映射规则。
解决方式如下:

  • 全局最优方案:添加编译参数 -Amapstruct.accessorNaming.excludedPrefixes=with,让MapStruct扫描访问器方法时自动排除with前缀的方法,不会识别Lombok生成的with方法,完全不需要额外配置映射规则,同时不影响正常的属性映射校验。
  • 临时兼容方案:如果不需要做未映射属性校验,可在@Mapper注解中配置unmappedTargetPolicy = ReportingPolicy.IGNORE,直接忽略所有未映射目标属性的报错。

编译参数配置示例

Maven配置

在pom.xml的maven-compiler-plugin配置中添加以下内容:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <annotationProcessorPaths>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.4.2.Final</version>
            </path>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </path>
        </annotationProcessorPaths>
        <compilerArgs>
            <arg>-Amapstruct.allowSetterAsSource=true</arg>
            <arg>-Amapstruct.accessorNaming.excludedPrefixes=with</arg>
        </compilerArgs>
    </configuration>
</plugin>

Gradle配置

在build.gradle的compileJava任务中添加以下内容:

compileJava {
    options.compilerArgs += [
        '-Amapstruct.allowSetterAsSource=true',
        '-Amapstruct.accessorNaming.excludedPrefixes=with'
    ]
}

注意:推荐优先使用全局编译参数的方案,既可以解决兼容性问题,也不会关闭MapStruct默认的未映射属性校验能力,避免漏掉需要映射的属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 20:09:02