![](/img/trans.png)
[英]Default value to another bean property when Source is null MapStruct
[英]MapStruct nullValueMappingStrategy primitive to bean return default bean instead of null value
MapStruct 版本:1.4.1.Final
When I am trying to map an integer to a bean, when the integer is null the target is still being created as a default object instead of null
@Mapper(componentModel = "spring", nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL, nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_NULL)
public interface CompanyMapper { // NOSONAR
CompanyMapper INSTANCE = Mappers.getMapper(CompanyMapper.class);
@Mapping(source = "parentId", target = "parent.id")
Company toEntity(RequestCompany request);
}
生成的代码
@Override
public Company toEntity(RequestCompany request) {
if ( request == null ) {
return null;
}
CompanyBuilder company = Company.builder();
company.parent( requestCompanyToCompany( request ) );
// Removed for simplicity
return company.build();
}
protected Company requestCompanyToCompany(RequestCompany requestCompany) {
if ( requestCompany == null ) {
return null;
}
CompanyBuilder company = Company.builder();
// Should verify if the parentId is null and
// return null if condition is met
company.id( requestCompany.getParentId() );
return company.build();
}
编辑:与https 相关://github.com/mapstruct/mapstruct/issues/1166#issuecomment-353742387
这按预期工作。 MapStruct 无法知道源 object 的哪些属性需要被视为执行映射的关键属性。
为了实现您正在寻找的内容,您必须为其提供自己的映射方法。
例如
@Mapper(componentModel = "spring", nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL, nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_NULL)
public interface CompanyMapper { // NOSONAR
default Company toEntity(RequestCompany request) {
if (request == null || request.getParentId() == null) {
return null;
}
return toEntity2(request);
}
@Named("ignoreForOtherMethods")
@Mapping(source = "parentId", target = "parent.id")
Company toEntity2(RequestCompany request);
}
注意:使用spring
组件 model 时建议不要使用Mapper#getMapper
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.