在 MapStruct 中使用多个源对象设置默认值策略
Setting Default Value Strategy with Multiple Source Object in MapStruct
我想对源对象的映射属性生成空值检查,如果源 属性 确实为空,则设置为默认值。
我尝试在@Mapper 和@Mapping 目标上使用NullValuePropertyMappingStrategy.SET_TO_DEFAULT,但生成的代码不包含默认设置器..
基本上我想要实现的是:
@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;
}
}
我没有像文档中指出的那样使用默认值策略编写我的示例,因为我尝试用空值映射嵌套属性时它没有起作用。有趣的是,NullValueCheckStrategy 工作没有任何问题但是 NullValuePropertyMappingStrategy 没有。
我也试过使用 @BeanMapping 设置它们,但没有用。
如果有人能指出正确的方向,我将不胜感激!
NullValuePropertyMappingStrategy
用于更新映射。如果你想应用它,你必须提供 OperationDTO
到 @MappingTarget
。
实现您的目标的唯一方法是使用 Mapping#defaultValue
或 Mapping#defaultExpression
我想对源对象的映射属性生成空值检查,如果源 属性 确实为空,则设置为默认值。
我尝试在@Mapper 和@Mapping 目标上使用NullValuePropertyMappingStrategy.SET_TO_DEFAULT,但生成的代码不包含默认设置器..
基本上我想要实现的是:
@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;
}
}
我没有像文档中指出的那样使用默认值策略编写我的示例,因为我尝试用空值映射嵌套属性时它没有起作用。有趣的是,NullValueCheckStrategy 工作没有任何问题但是 NullValuePropertyMappingStrategy 没有。
我也试过使用 @BeanMapping 设置它们,但没有用。
如果有人能指出正确的方向,我将不胜感激!
NullValuePropertyMappingStrategy
用于更新映射。如果你想应用它,你必须提供 OperationDTO
到 @MappingTarget
。
实现您的目标的唯一方法是使用 Mapping#defaultValue
或 Mapping#defaultExpression