在MapStruct中使用多源对象设置默认值策略



我想对源对象的映射属性生成null检查,如果源属性确实为null,则设置为默认值。

我曾尝试在@Mapper和@Mapping目标上使用NullValuePropertyMappingStrategy.SET_to_DEFAULT,但生成的代码不包括默认的setter。。

所以基本上我想要实现的是:

@Mapper(componentModel = "spring")
public interface OperationDataMapper {
OperationDTO from(Object 1 o1, Object2 o2);
}

这样我生成的代码就变成了:

@Component
public class OperationDataMapperImpl implements OperationDataMapper {
@Override 
public OperationDTO from(Object 1 o1, Object2 o2) {
if ( o1 == null && o2 == null ) {
return null;
}
OperationDTO operationDTO = new OperationDTO();
if ( o1 != null ) {
if(o1.getProp1() != null) {
operationDTO.setProp1( o1.getProp1() )
} else {
operationDTO.setProp1( "" ) // if property is a string for example
}
.
.
}

if ( o2 != null ) {
if(o2.getProp2() != null) {
operationDTO.setProp2( o2.getProp2() )
} else {
operationDTO.setProp2( "" ) // if property is a string for example
}
.
.
}

return operationDTO;
}
}

我没有像文档中指出的那样使用默认值策略编写示例,因为我没有尝试用null值映射嵌套属性。。有趣的是,NullValueCheckStrategy工作起来没有任何问题,但NullValuePropertyMappingStrategy却没有。

我还尝试过使用@BeanMapping设置它们,但没有成功。

如果有人能为我指明正确的方向,我将不胜感激!

NullValuePropertyMappingStrategy用于更新映射。如果你想应用它,你必须提供OperationDTO@MappingTarget

实现您想要的目标的唯一方法是使用Mapping#defaultValueMapping#defaultExpression

相关内容

  • 没有找到相关文章

最新更新