【问题标题】:MapStruct: Map two sources and return null if one of them is nullMapStruct:映射两个源,如果其中一个为 null,则返回 null
【发布时间】:2021-04-10 09:48:00
【问题描述】:

我找不到答案,我相信 MapStruc 不可能做到这一点。我还是想问一下,也许我错过了什么。

假设我有一个映射方法,它需要两个源并映射到一个目标

@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 支持这个吗?

P.S.:我们使用 MapStruct 1.3.1

【问题讨论】:

    标签: mapstruct


    【解决方案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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 2021-09-13
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多