Mapstruct中的嵌套映射

Ada*_*IJK 4 spring mapstruct

我是MapStruct API的新手,任何人都可以说如何做嵌套映射。我有两个类,一个是我的实际purchaseOrder类,即我的目标类,另一个是EDPurchaseOrder类,即源文件,这里不必担心我使用的命名约定,只需处理源文件和目标文件即可。

源类
源类EDCustomerOrder及其参考类

    public class EDCustomerOrder{
        private Integer orderID;
        private String orderNumber;
        private BigDecimal orderTotalQty;
        private String UOM;
        private PickupDTO pickupPoints;
        private Integer supplierID;
        private String supplierName;
        private String supplierNature;
        private EDAddress supplierEDAddress;
    }

    public class EDPickup{
        private List<EDPOItem> items;
    }

    public class EDAddress{
        private String addressLine1;
        private String addressLine2;
        private String addressLine3;
        private String city;
        private String state;
        private string countryCode;
        private String country;
        private String postalCode;
    }

    public class EDPOItem{
        private Integer itemID;
        private String itemCode;
        private String itemDescription;
        private Integer itemQuantity;
    }
Run Code Online (Sandbox Code Playgroud)

目标类
这里是我的目标类CustomerOrder及其参考类

    public class CustomerOrder{
        private Integer orderID;
        private String orderNumber;
        private List<Pickup> pickupPoints;
        private Supplier supplierDetail;
    }

    public class Pickup{
        private Integer pickupID;
        private Integer pickupLocationNumber;
        private List<POItem> items;
    }

    public class POItem{
        private Integer itemID;
        private String itemCode;
        private String itemDescription;
        private Integer itemQuantity;
    }

    public class Supplier{
        private Integer supplierID;
        private String supplierName;
        private String supplierNature;
        private Address supplierAddress;
    }

    public class Address{
        private String addressLine1;
        private String addressLine2;
        private String addressLine3;
        private String city;
        private String state;
        private string countryCode;
        private String country;
        private String postalCode;
    }
Run Code Online (Sandbox Code Playgroud)

Gun*_*nar 5

所以,我想你在目标端,例如对象的同一层级SongDTOLibraryDTOTrackDTO

然后,您必须为每对对应对象声明一个映射方法,并@Mapping根据需要通过以下方法进行配置:

public interface MyMapper {

    @Mapping(source="name", target="title")
    SongDTO songToDto(Song song);

    LibraryDTO libraryToDto(Library library);

    TrackDTO trackToDto(Track track);
}
Run Code Online (Sandbox Code Playgroud)

然后,例如songToDto()将调用生成的实现,libraryToDto()以便将歌曲的库映射到歌曲DTO的库DTO。

另请参阅参考指南以了解更多信息。

  • 这个答案很难通过它的例子来理解。问题中的类名与答案中的类名不符。问题中没有“songDto”或“trackToDto”(还有吗?)。这个可以编辑吗? (3认同)
  • 请将您的问题发布在 StackOverflow 上,以便其他人也可以从答案中学习。但我建议查看参考指南,因为它详细描述了各种映射选项。因此,您很有可能会在那里找到答案。谢谢。 (2认同)