映射结构:当源为空时,目标不应设置为空



我正在尝试使用 mapstruct 1.2.0 映射嵌套属性.CR2。(示例映射 customer.address.houseNumber to userDTO.homeDTO.addressDTO.houseNo )。

期望 : 当客户地址为空时,我不想将地址DTO设置为空。 由于地址DTO包含"县名"和其他属性,这些属性已经从其他不同的来源设置。

请告知是否有我可以设置的属性/设置,以便在源为空时目标不设置为 null。

@Mapper( nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS )
public interface CustomerUserMapperNullCheck {
    @Mapping(source="address", target="homeDTO.addressDTO" )
    void mapCustomer(Customer customer, @MappingTarget  UserDTO userDTO)  ;
    @Mapping(source="houseNumber", target="houseNo" )
    void mapCustomerHouse(Address address, @MappingTarget  AddressDTO addrDTO)  ;
}

我最初尝试使用如下所示的单个映射

@Mapping(target="homeDTO.addressDTO.houseNo", source="address.houseNumber")
 abstract void mapCustomerHouse(Customer customer, @MappingTarget  UserDTO userDTO)  ; 

然后尝试根据 https://github.com/mapstruct/mapstruct/issues/649 拆分映射。

两种方法都没有产生预期的结果/生成的方法代码

 protected void customerToHomeDTO(Customer customer, HomeDTO mappingTarget) {
        if ( customer == null ) {
            return;
        }
        if ( customer.getAddress() != null ) {
            if ( mappingTarget.getAddressDTO() == null ) {
                mappingTarget.setAddressDTO( new AddressDTO() );
            }
            mapCustomerHouse( customer.getAddress(), mappingTarget.getAddressDTO() );
        }
        **else {
            mappingTarget.setAddressDTO( null );   // I dont want to else where addressDTO is set to null.
        }**
    }

完整的生成代码在这里
https://github.com/mapstruct/mapstruct/issues/1306

谢谢

@Mapper( nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE )
对我来说,

它的工作原理是这样的:

@Mapper(nullValueMappingStrategy =  NullValueMappingStrategy.RETURN_DEFAULT)
public interface MyMapper {
...
}
对我来说

只有这个有效,如下所述: https://github.com/mapstruct/mapstruct/issues/649

@Mapper( nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS )

这对我有用:

@BeanMapping(nullValuePropertyMappingStrategy =  NullValuePropertyMappingStrategy.IGNORE)
void updateProduct(@MappingTarget Product entity, ProductRequestDto dto);

@Mapping注释需要当前(1.5.5.Final)MapStruct版本中的"目标"选项。

感谢您在 github 讨论@tak3shi链接!

相关内容

  • 没有找到相关文章

最新更新