8

我正在使用 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;
    }
}
4

2 回答 2

16

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

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

目前仅支持 java 作为一种表达式语言,MapStruct 只会将您在括号内编写的内容直接应用到 setter,实现看起来与您的示例完全相同。

于 2017-04-11T18:41:44.983 回答
8

您也可以忽略此属性的映射:

@Mapping(target = "prop1", ignore = true)

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

于 2017-04-13T09:04:30.807 回答