我正在尝试使用 mapstruct 1.2.0.CR2 映射嵌套属性。(示例将customer.address.houseNumber映射到 userDTO.homeDTO.addressDTO.houseNo)。
期望:当 customer.address 为 null 时,我不想将 addressDTO 设置为 null。由于 addressDTO 包含“countyname”和其他已从其他不同源设置的属性。
请告知我是否可以设置某些属性/设置,以便当源为空时目标不会设置为空。
@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) ;
}
Run Code Online (Sandbox Code Playgroud)
我最初尝试像下面这样的单一映射
@Mapping(target="homeDTO.addressDTO.houseNo", source="address.houseNumber")
abstract void mapCustomerHouse(Customer customer, @MappingTarget UserDTO userDTO) ;
Run Code Online (Sandbox Code Playgroud)
然后尝试基于https://github.com/mapstruct/mapstruct/issues/649拆分映射。
两种方法都不会产生预期的结果/生成的方法代码
protected void customerToHomeDTO(Customer customer, HomeDTO mappingTarget) {
if ( customer == null ) {
return;
} …
Run Code Online (Sandbox Code Playgroud) 我想映射嵌套的java对象。Customer.address.houseNumber
到userDTO.homeDTO.addressDTO.houseNo
。
期望: 当且仅当 Customer.address.houseNumber
不为 null 时,才homeDTO
在 下创建对象userDTO
。否则,不要创建任何目标对象。
问题: 我已经"NullValueCheckStrategy.ALWAYS"
在映射器中使用了,但是mapstruct正在检查是否address
不为空,然后它会创建homeDTO
. 里面address
,houseNumber
就是null
。我想要空检查直到houseNumber
(叶/最后一级对象),然后创建目标对象。
我怎样才能实现这个目标?
这是我正在使用的映射。
@Mapper( nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS )
public interface Customer2UserMapper {
@Mapping(source="address.houseNumber", target="homeDTO.addressDTO.houseNo" )
void mapCustomerHouse(Customer customer, @MappingTarget UserDTO userDTO) ;
}
Run Code Online (Sandbox Code Playgroud)