使用 mastruct 将 null 设置为目标
Set null to target using mastruct
我正在使用 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;
}
}
您可以使用 @Mapping(target = "prop1", expression = "java(null)")
来实现。
您可以在参考指南中找到有关表达式的更多信息 here。
目前只支持 java 作为表达式语言,MapStruct 将把你在括号内写的内容直接应用到 setter,实现看起来和你的完全一样例如。
你也可以忽略这个 属性:
的映射
@Mapping(target = "prop1", ignore = true)
这会将此值设置为默认值,在您的情况下为 null
我正在使用 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;
}
}
您可以使用 @Mapping(target = "prop1", expression = "java(null)")
来实现。
您可以在参考指南中找到有关表达式的更多信息 here。
目前只支持 java 作为表达式语言,MapStruct 将把你在括号内写的内容直接应用到 setter,实现看起来和你的完全一样例如。
你也可以忽略这个 属性:
的映射@Mapping(target = "prop1", ignore = true)
这会将此值设置为默认值,在您的情况下为 null