2017-09-28 112 views
0

我想映射嵌套的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。更正它。 –

回答

0

這是如在mapstruct/mapstruct#879類似的東西。目前你正在尋找的是不可能的。

這樣做將是一個方法確實有@AfterMapping方法,將其設置回null如果address.houseNumbernull

+0

謝謝菲利普。但@AfterMapping將會是額外的代碼來檢查src是否爲空,然後將target設置爲null。我有1000個要映射的元素,對於每個元素我都無法做這個檢查。 –

+0

我知道它會提取代碼,但目前這是解決您的問題的唯一方法。這就是爲什麼我把你和這個問題聯繫起來,你可以在那裏發表評論和讚揚。 – Filip