Java mapstruct:嵌套对象。仅当源元素不为Null时创建目标对象

Java mapstruct:嵌套对象。仅当源元素不为Null时创建目标对象,java,null,nested,mapstruct,Java,Null,Nested,Mapstruct,我想映射嵌套的java对象客户.address.houseNumber至userDTO.homeDTO.addressDTO.houseNo 期望值:当且仅当Customer.address.houseNumber不为空,然后在userDTO下创建homeDTO对象。否则,不要创建任何目标对象 问题:我在映射程序中使用了“NullValueCheckStrategy.ALWAYS”。但是mapstruct正在检查地址是否不为空,然后创建homeDTO。在地址中,门牌号为空。我希望在门牌号(叶子/

我想映射嵌套的java对象<代码>客户.address.houseNumber至
userDTO.homeDTO.addressDTO.houseNo

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

问题:我在映射程序中使用了
“NullValueCheckStrategy.ALWAYS”
。但是mapstruct正在检查
地址
是否不为空,然后创建
homeDTO
。在
地址
中,
门牌号
为空。我希望在
门牌号
(叶子/最后一层对象)之前进行空检查,然后创建目标对象

请告知我应该如何做到这一点

这是我正在使用的映射

@Mapper( nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS )
public interface Customer2UserMapper {

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

}

生成的代码位于中,这与中的类似。目前你正在寻找的是不可能的


一种方法是使用
@AfterMapping
方法,如果
address.houseNumber
null

,则该方法会将其设置回
null
,如
customer.getAddress()=.getHouseNumber()
谢谢您,RII。更正了,谢谢菲利普。但是@AfterMapping将是额外的代码,用于检查src是否为null,然后将target设置为null。我有1000个元素需要映射,对于每个元素,我不能做这个检查。我知道它将是提取代码,但目前这是解决问题的唯一方法。这就是为什么我把你和这个问题联系在一起,在那里你可以发表评论和投票。在将近2.5年之后,有没有关于这个问题的更新?提前谢谢。@vkrishna17