MapStruct 嵌套对象,仅当源元素不为空时才创建目标对象



我想映射嵌套的java对象。Customer.address.houseNumberuserDTO.homeDTO.addressDTO.houseNo.

期望:当且仅当Customer.address.houseNumber不为空时,则在userDTO下创建homeDTO对象。否则,不要创建任何目标对象。

问题:我在映射器中使用了"NullValueCheckStrategy.ALWAYS",但mapstruct正在检查address是否不为空,然后创建homeDTO。在address内,houseNumbernull。我希望空检查直到houseNumber(叶/最后一个级别对象),然后创建目标对象。

我怎样才能做到这一点?

这是我正在使用的映射。

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

生成的代码 https://github.com/mapstruct/mapstruct/issues/1303

这与mapstruct/mapstruct#879类似。目前,您正在寻找的内容是不可能的。

一种方法是有一个@AfterMapping的方法,如果address.houseNumbernull,该方法会将其设置回null

可以使用嵌套映射器执行此操作。 mapCustomerToHouse 映射器将使用 mapHouseNumberToHouseNo 映射器将 houseNumber 映射到 homeDTO,因为它们不是同一类型。 嵌套映射器将检查 houseNo 是否为空,如果是,则不实例化 HomeDTO 对象:

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

相关内容

  • 没有找到相关文章

最新更新