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

MapStruct多源参数映射时如何跳过源全空返回null的校验

首先澄清你贴出的自动生成代码的默认逻辑已经匹配你的需求:
生成代码中的判断条件为 source1== null && source2== null && source3== null,仅当三个入参全部为null时才会返回null,只要source2不为null,哪怕source1、source3全为null,也不会触发返回null的分支,会正常实例化SomeClass对象,将source2的address字段赋值到目标对象,其余来源为null的字段直接赋值为null,完全符合你的要求。

如果你实际运行中不符合该逻辑,或需要调整空映射的返回规则,可以用MapStruct原生支持的配置实现:

场景1:需要修改默认空判断逻辑(即使所有入参全为null也返回空对象而非null)

可以通过配置nullValueMappingStrategy实现:

  1. 单个Mapper生效:
    给对应的Mapper接口的@Mapper注解添加配置:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.NullValueMappingStrategy;

@Mapper(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)
public interface SomeMapper {
    @Mappings({
        @Mapping(source = "source1.name", target = "name"),
        @Mapping(source = "source2.address", target = "address"),
        @Mapping(source = "source3.company", target = "company")
    })
    SomeClass map(Source1 source1, Source2 source2, Source3 source3);
}
  1. 全局生效:
    在项目的编译配置中添加MapStruct全局编译参数,以Maven为例:
<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>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>1.5.5.Final</version>
                    </path>
                </annotationProcessorPaths>
                <compilerArgs>
                    <arg>-Amapstruct.nullValueMappingStrategy=RETURN_DEFAULT</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

配置后生成的实现类会删除全空返回null的判断,无论入参是否为null,都会先实例化目标对象再执行字段映射。

场景2:实际生成的判断条件为或逻辑(任意入参为null就返回null)

该情况通常是你使用的MapStruct版本低于1.3,升级MapStruct到1.3及以上稳定版本即可,高版本默认多参数映射的空判断逻辑就是全空才返回null。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:03