【问题标题】:MapStruct - How to set different null strategy for different mapping methods?MapStruct - 如何为不同的映射方法设置不同的空策略?
【发布时间】:2019-06-08 00:33:57
【问题描述】:

我希望有一个 Mapper 类同时具有 createupdate 方法。 create 方法的生成代码很好,但是在更新的情况下,我想在目标中设置属性,前提是它们在源中不为空。

如何使用mapStruct

由于nullValueMappingStrategy 是在MapperMapping 级别定义的,因此出现了混淆。

如果我将该值设置为Mapper 级别,它将应用于所有方法,包括创建和更新。

@Mapper // If I define null strategy here, it will be applied to all methods
public interface AmcPkgMapper {

    AmcPkgMapper MAPPER = Mappers.getMapper(AmcPkgMapper.class);

    AmcPackage create(AmcPackageRequest amcPackageRequest);

    // How to define the null strategy here??
    void update(AmcPackageRequest amcPackageRequest, @MappingTarget  AmcPackage amcPackage);

}

如果我使用Mapping 在方法上设置它,那么它希望我定义一个target 对象,为此我可能需要一个包装器对象并以某种方式映射其中的所有内部属性。

@Mapping(target = "amcPackage", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void update(AmcPackageRequest amcPackageRequest, @MappingTarget AmcPackageWrapper amcPackageWrapper);

使用上述方法,生成的代码如下所示,它不会进入amcPackage 来设置所有属性。

@Override
public void update(AmcPackageRequest amcPackageRequest, AmcPackageWrapper amcPackageWrapper) {
    if ( amcPackageRequest == null ) {
        return;
    }
// nothing is mapped actually!!
}

有没有一种简单的方法可以在不创建单独的映射器类的情况下进行创建和更新?

【问题讨论】:

    标签: mapstruct


    【解决方案1】:

    @BeanMapping搞定了

    @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
                nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
    void update(AmcPackageRequest amcPackageRequest, @MappingTarget AmcPackage amcPackage);
    

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多