使用mastruct将null设置为target

时间:2017-04-11 13:37:32

标签: java code-generation mapstruct

我正在使用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和mapper能够生成以下源代码,

@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;
    }
}

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

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

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

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