我有两个具有相同字段名和类型的对象Source和Target。
如果源字段为空,我希望目标字段为“”(空字符串)
我的接口Map看起来像这样(这只是两个字段,我有很多)
@Mapper(componentModel = "spring", nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)
public interface MyMapper {
@Mappings({
@Mapping(target="medium", defaultExpression="java(\"\")"),
@Mapping(target="origin", defaultExpression="java(\"\")")
})
public Target mapFrom(Source source)
如果源有一个值,则应复制该值,如果源中的值为空,则目标中的值应为“”。
Mapstruct-1.3.0似乎只是将所有内容都保持为空。
有什么想法吗?我想默认为空字符串的一切
2条答案
按热度按时间wrrgggsh1#
您需要设置
NullValuePropertyMappingStrategy
(作为Mapper
注解的一部分)来定义如何Map空属性。请参阅空值属性Map策略.html#SET_TO_DEFAULT
String
的默认值为""
,不需要显式定义。因此,您的Map器可以简单地如下所示:
fae0ux8s2#
当您的源对象具有与目标对象相同的字段,并且您希望管理所有源空值(例如,字符串),使其在目标对象中成为空字符串("")时,您可以从MapStruct库创建Map器接口,如下所示:
步骤1:
整个技巧是定义
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT
,但你不能在@Mapper注解中定义它。相反,你必须把它作为update()
方法的@BeanMapping注解中的参数。你可以在MapStruct文档中阅读更多关于这方面的内容。第二步:
因此,您必须在代码中再执行一个操作,并使用刚刚实现的'update()'方法:
所有的 * 空到空字符串过程 * 都发生在
mapper.update(source, target)
方法下。在为你的项目运行mvn clean install
之后,你可以检查它在target/generated-sources/annotations/...../SourceToTargetMapperImpl.java
文件中的外观和工作方式。