【发布时间】:2019-06-08 00:33:57
【问题描述】:
我希望有一个 Mapper 类同时具有 create 和 update 方法。 create 方法的生成代码很好,但是在更新的情况下,我想在目标中设置属性,前提是它们在源中不为空。
如何使用mapStruct?
由于nullValueMappingStrategy 是在Mapper 或Mapping 级别定义的,因此出现了混淆。
如果我将该值设置为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