使用ModelMapper时,如何为源类上的特定属性指定自定义映射?

时间:2015-05-05 15:25:05

标签: java model-view-controller modelmapper

具体来说,我想将Source类(PurchaseOrderFilterViewModel)中的String转换为Destination类(org.joda.time.LocalDate)中的PurchaseOrderFilter

我尝试按照documentation使用PropertyMap<Source, Destination>,但它不起作用。 Destination类中的日期始终分配给当前日期,当作为构造函数参数传入null时,该日期是默认的LocalDate。

    PurchaseOrderFilterViewModel purchaseOrderFilterViewModel1 = new PurchaseOrderFilterViewModel();
    purchaseOrderFilterViewModel.setStartReceiptDate("2015-04-15");
    purchaseOrderFilterViewModel.setEndReceiptDate("2015-04-17");

    ModelMapper modelMapper = new ModelMapper();

    modelMapper.createTypeMap(PurchaseOrderFilterViewModel.class, PurchaseOrderFilter.class);
    modelMapper.addMappings(new PropertyMap<PurchaseOrderFilterViewModel, PurchaseOrderFilter>()
    {
        @Override
        protected void configure()
        {
            map().setStartReceiptDate(new LocalDate(source.getStartReceiptDate()));
            map().setEndReceiptDate(new LocalDate(source.getEndReceiptDate()));
        }
    });

    PurchaseOrderFilter purchaseOrderFilter = modelMapper.map(purchaseOrderFilterViewModel, PurchaseOrderFilter.class);

1 个答案:

答案 0 :(得分:1)

请注意,在configure中,您使用DSL来定义映射。它不是modelmapper执行映射时运行的代码。

换句话说,您的配置现在指示将setStart/EndReceptionDate映射为new LocalDate(null),因为source.getStart/EndReceiptDate()在您定义配置时会返回null

您应该使用Converter