Set null to target using mastruct

纵饮孤独 提交于 2019-12-07 17:40:41

问题


I am using mapstruct and I am wondering if there are any ways to set null value for some target properties. For example,

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);

}

I would love the above source, dto and mapper to generate the below source code,

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

回答1:


You can use @Mapping(target = "prop1", expression = "java(null)") to achieve that.

You can find more information about expression in the reference guide here.

Currently only java is supported as an expression language, MapStruct will just take what you have written within the brackets and directly apply it to the setter, the implementation will look exactly like in your example.




回答2:


Also you can ignore mapping of this property:

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

this will set this value to default which is null in your case



来源:https://stackoverflow.com/questions/43347620/set-null-to-target-using-mastruct

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!