【问题标题】:Mapstruct to update values without overwritingMapstruct 更新值而不覆盖
【发布时间】:2018-10-13 15:14:43
【问题描述】:

有没有办法指示 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/,但它们似乎都不适合。

【问题讨论】:

  • MapStruct 目前不支持此功能。通常,当人们更新对象时,他们想要更改目标实例中的字段。你正在尝试做其他事情。您能否提供一些关于您到底想做什么的解释,也许还有其他方法可以解决您的问题

标签: java spring spring-boot mapstruct


【解决方案1】:

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

【讨论】:

  • 我是 MapStruct 的作者之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2021-02-14
  • 2017-07-22
  • 1970-01-01
  • 2021-10-27
  • 2013-02-15
  • 1970-01-01
相关资源
最近更新 更多