使用 mastruct 将 null 设置为目标

Set null to target using mastruct

我正在使用 mapstruct,我想知道是否有任何方法可以为某些目标属性设置空值。例如,

public class MySource {
    private String prop1;
    private String prop2;

    public MySource() {
        // Initialization.
    }

    // Getters - Setters.
}

public class MySourceDto {
    private String prop1;
    private String prop2;

    public MySourceDto() {
        // Initialization.
    }

    // Getters - Setters.
}

@Mapper
public interface MySourceMapper {

    @Mappings({
        @Mapping(target = "prop1", propertyToSetNull = null)})
    public MySourceDto toView(MySource mySource);

}

我喜欢上面的源代码、dto 和映射器来生成下面的源代码,

@Component
public class MySourceMapperImpl implements MySourceMapper {

    @Override
    public MySourceDto toView(MySource mySource) {
        if ( mySource == null ) {
            return null;
        }

        MySourceDto mySourceDto = new MySourceDto();

        mySourceDto.setProp1( mySource.getId() );
        mySourceDto.setProp2( null );

        return mySourceDto;
    }
}

您可以使用 @Mapping(target = "prop1", expression = "java(null)") 来实现。

您可以在参考指南中找到有关表达式的更多信息 here

目前只支持 java 作为表达式语言,MapStruct 将把你在括号内写的内容直接应用到 setter,实现看起来和你的完全一样例如。

你也可以忽略这个 属性:

的映射
@Mapping(target = "prop1", ignore = true)

这会将此值设置为默认值,在您的情况下为 null