MapStruct:当目标字段engine为null时如何忽略映射?
MapStruct忽略null字段映射的实现方案
要实现当CarDto的device字段为null时,忽略对Car的engine字段的映射更新,只需在@Mapping注解中添加nullValuePropertyMappingStrategy配置即可,这是MapStruct专门用于处理源字段为null时是否更新目标属性的策略。
单个字段精准配置
修改后的映射接口代码如下:
import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.MappingTarget; import org.mapstruct.NullValuePropertyMappingStrategy; @Mapper public interface CarMapper { @Mapping(target = "engine", source = "device", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) void updateCarFromDto(CarDto carDto, @MappingTarget Car car); }
该配置的作用是:当carDto.device为null时,MapStruct不会执行该字段的赋值操作,Car对象中原有的engine值会被保留;若device存在有效值,则正常覆盖更新目标属性。
全局配置(所有字段生效)
如果需要让接口内所有映射方法都遵循“源字段为null则忽略更新”的规则,可以直接在@Mapper注解中设置全局策略:
import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.MappingTarget; import org.mapstruct.NullValuePropertyMappingStrategy; @Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) public interface CarMapper { @Mapping(target = "engine", source = "device") void updateCarFromDto(CarDto carDto, @MappingTarget Car car); }
内容的提问来源于stack exchange,提问作者ikhvjs
相关产品推荐
相关产品推荐

