Mapstrtuct:嵌套对象。仅当源元素不为空时才创建目标对象

问题描述:

我想映射嵌套的java对象。 Customer.address.houseNumberuserDTO.homeDTO.addressDTO.houseNoMapstrtuct:嵌套对象。仅当源元素不为空时才创建目标对象

后市展望:当且仅当Customer.address.houseNumber不为空,然后创建userDTOhomeDTO对象。否则,不要创建任何目标对象。

问题:我在映射程序中使用了"NullValueCheckStrategy.ALWAYS"。但地图结构正在检查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) ; 

} 

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

+0

有在代码中的一些错别字(错误),您连接,例如'customer.getAddress()=。getHouseNumber()' –

+0

谢谢Andrii。更正它。 –

这是如在mapstruct/mapstruct#879类似的东西。目前你正在寻找的是不可能的。

这样做将是一个方法确实有@AfterMapping方法,将其设置回null如果address.houseNumbernull

+0

谢谢菲利普。但@AfterMapping将会是额外的代码来检查src是否为空,然后将target设置为null。我有1000个要映射的元素,对于每个元素我都无法做这个检查。 –

+0

我知道它会提取代码,但目前这是解决您的问题的唯一方法。这就是为什么我把你和这个问题联系起来,你可以在那里发表评论和赞扬。 – Filip