2 回答
TA贡献1860条经验 获得超9个赞
您需要设置NullValuePropertyMappingStrategy
(作为注释的一部分Mapper
)以定义如何映射空属性。
参见NullValuePropertyMappingStrategy.html#SET_TO_DEFAULT
String
的默认值为""
。您不需要明确定义它。
所以,你的映射器可以简单地看起来像这样:
@Mapper(
componentModel = "spring",
nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT,
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT
)
public interface MyMapper {
public Target mapFrom(Source source);
}
TA贡献1805条经验 获得超9个赞
当您的 Source 对象具有与 Target 对象相同的字段并且当您想要管理所有 Source空值(例如对于 String)成为Target 对象中的空字符串(“”)时,您可以从MapStruct库创建映射器接口,如下所示:
步骤1:
@Mapper(componentModel = "spring")
public interface SourceToTargetMapper {
Target map(Source source);
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT)
void update(Source source, @MappingTarget Target target);
}
整个技巧是定义nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT,但您不能在 @Mapper 注释中定义它。取而代之的是,您必须将它作为参数放在update()方法的 @BeanMapping 注释中。您可以在MapStruct 文档中阅读更多相关信息。
第2步:
因此,您必须在代码中再执行一项操作并使用刚刚实现的“update()”方法:
@Component
public class ClassThatUsingMapper {
private final SourceToTargetMapper mapper;
public Target someMethodToMapObjects(Source source) {
Target target = mapper.map(source);
mapper.update(source, target)
return target;
}
}
所有null 到空 String 的过程都发生在mapper.update(source, target)method 下。为您的项目运行后mvn clean install,您可以检查它的外观以及它在target/generated-sources/annotations/...../SourceToTargetMapperImpl.java文件中的工作方式。
添加回答
举报