我正在使用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;
}
}
答案 0 :(得分:6)
您可以使用@Mapping(target = "prop1", expression = "java(null)")
来实现这一目标。
您可以在参考指南here中找到有关表达的更多信息。
目前只支持java作为表达式语言,MapStruct只会将您在括号中编写的内容直接应用于setter,实现将与您的示例完全相同。
答案 1 :(得分:1)
此外,您可以忽略此属性的映射:
@Mapping(target = "prop1", ignore = true)
这会将此值设置为default,在您的情况下为null