我想拥有一个Mapper同时包含create和update方法的类。为create方法生成的代码很好,但是在更新的情况下,仅当源中的属性不为null时,我才想在目标中设置属性。
我该怎么做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);
}
Run Code Online (Sandbox Code Playgroud)
并且,如果我使用将该方法设置为方法Mapping,则它希望我定义一个target对象,为此,我可能需要一个包装对象,并以某种方式映射其中的所有内部属性。
@Mapping(target = "amcPackage", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void update(AmcPackageRequest amcPackageRequest, @MappingTarget AmcPackageWrapper amcPackageWrapper);
Run Code Online (Sandbox Code Playgroud)
使用上述方法,生成的代码如下所示,该代码无需amcPackage设置所有属性。
@Override
public void update(AmcPackageRequest amcPackageRequest, AmcPackageWrapper amcPackageWrapper) {
if ( amcPackageRequest == null ) {
return;
}
// nothing is mapped actually!!
}
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法,而无需创建用于创建和更新的单独的映射器类?
完成了 @BeanMapping
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
void update(AmcPackageRequest amcPackageRequest, @MappingTarget AmcPackage amcPackage);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1963 次 |
| 最近记录: |