gpt4 book ai didi

MapStruct - 如何为不同的映射方法设置不同的空策略?

转载 作者:行者123 更新时间:2023-12-01 09:12:57 27 4
gpt4 key购买 nike

我要单例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!!
}

有没有一种简单的方法可以在不为创建和更新创建单独的映射器类的情况下做到这一点?

最佳答案

@BeanMapping 搞定了

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

关于MapStruct - 如何为不同的映射方法设置不同的空策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54174437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com