Mapstruct更新值而不覆盖

时间:2018-10-11 08:13:59

标签: java spring spring-boot mapstruct

有没有一种方法可以指示MapStruct不覆盖目标中的值?

例如:

public interface IMyMapper {
    IMyMapper INSTANCE = Mappers.getMapper(IMyMapper.class);
    @Mappings({
            @Mapping(target = "foo", source = "source.FOO"),
            @Mapping(target = "bar", source = "source.BAR2"),
    })
    void updateTargetEntity(@MappingTarget MyTarget target , MySource source);
}

class MyTarget {
 String a;
 String b;
 ...
}

class MySource {
 String a;
 String b;
 ...
}

例如target将具有a = "asdf",而source将具有a = "zzz",而我不希望zzz覆盖asdf

注意:我不想总是忽略值,我只是不想覆盖它们(如果存在)。

我试图在此处查看几种映射策略:http://mapstruct.org/documentation/stable/reference/html/,但似乎都不合适。

2 个答案:

答案 0 :(得分:1)

我们目前正在讨论此问题。有一个PR待处理。留意那一个。对于BeanMappings,所有当前策略都适用于BeanMapping级别,而不适用于属性级别。因此,NullValueMappingStrategy会告诉您,当输入bean(或Map,或者MapMapping为IterableMapping的情况下为List)为空时会发生什么。一直没有(直到不久)您想要的东西。

答案 1 :(得分:-1)

这可以通过ignore属性来完成:

@Mapping(target = "a", ignore = true)