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

Mar*_*rcA 3 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)

Run Code Online (Sandbox Code Playgroud)

如果源有一个值,则应将其复制,如果源中为空,则在目标中应为“”。

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

任何想法?我希望所有内容都默认为空字符串

Mic*_*ael 5

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

}
Run Code Online (Sandbox Code Playgroud)