Mapstruct:当源为Null(两个字段具有相同的名称和类型)时,如何将目标字符串默认为空字符串(Java和Spring)

时间:2019-07-17 13:42:04

标签: java mapstruct

我有两个具有相同字段名称和类型的对象源和目标。

如果源字段为空,我希望目标为“”(空字符串)

我的接口映射如下(这只是两个字段,我有很多)

@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)

如果Source中有一个值,则应将其复制过来;如果Source中的值为null,则在目标中应为“”。

Mapstruct-1.3.0似乎只是将所有内容保留为空。

有什么想法吗?我希望所有内容默认为空字符串

1 个答案:

答案 0 :(得分:0)

您需要设置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);

}