MapStruct:映射两个源,如果其中一个为null,则返回null



我找不到答案,我认为这在MapStruct中是不可能的。我还是想问一下,也许我错过了什么。

我有一种映射方法,它采用两个源并映射到一个目标,比如

@Mapping(...)
@Mapping(...)
...
Target mapToTarget(SourceA a, SourceB b);

生成的代码执行以下null检查以返回null:

if (a == null && b == null) return null;

我想要

if (a == null || b == null) return null;

目前,我事先进行了筛选,这样就不会将null作为输入。如果参数是null,我希望跳过这一部分,简单地在映射器中返回null

MapStruct支持这一点吗?

附言:我们使用MapStruct 1.3.1

这在MapStruct中是不可能的。但是,您可以通过提供默认方法来实现这一点。

例如

@Mapper
public abstract class CustomerMapper {
public Target mapToTarget(SourceA a, SourceB b) {
if (a == null || b == null) {
return null;
}
return mapToTargetWithMapStruct(a, b);
}
@Named("ignore") // @Named in order for MapStruct not to consider this as a candidate
protected abstract mapToTargetWithMapStruct(SourceA a, SourceB b);
}

相关内容

最新更新