可以使用MapStruct提供的@MapperConfig注解在接口上定义公共的配置,然后在具体的映射类上使用@MapperConfig注解引用公共配置。在公共配置中,可以通过使用MapStruct的Expr
ess
ion Language(简写为“EL”)来编写自定义的映射逻辑。
具体实现步骤如下:
在Mapper接口中添加@MapperConfig注解,定义忽略null字段的映射策略:
@MapperConfig(unmappedTargetPolicy = ReportingPolicy.IGNORE,
nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL,
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
unmappedTargetPolicy表示忽略未映射的目标属性,nullValueMappingStrategy和nullValuePropertyMappingStrategy表示忽略null值的映射策略。
在具体的映射类上引用@MapperConfig注解,引用公共配置:
@Mapper(config = MyMapperConfig.cl
as
s)
其中,MyMapperConfig是上一步定义的公共配置。
编写自定义的EL表达式,实现忽略所有字段都为空的源对象:
@Mapper
public interface MyMapper {
@Mapping(target = "field1", expression = "java(source.getField1() != null ? source.getField1() : null)")
@Mapping(target = "field2", expression = "java(source.getField2() != null ? source.getField2() : null)")
// ...
TargetObject map(SourceObject source);
代码中的expression属性中,使用了三元表达式实现了忽略源对象中所有字段都为空的映射。
通过以上的步骤,就可以实现映射时忽略源对象中所有字段都为空的映射对象。