使用MapStruct将目标设置为null

12

我正在使用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;
    }
}
2个回答

29

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

更多关于表达式的信息可以在参考指南这里找到。

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


14

同时您可以忽略该属性的映射:

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

这将把该值设置为默认值,在您的情况下是null


3
在这种情况下,属性prop1将被忽略,并且将获得默认值或构造函数中设置的值。谢谢您的回答,但我的需求是在mupstruct生成的源代码中设置空值。 - Georgios Syngouroglou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接