使用Modelmapper,如何映射到没有default / no-args构造函数的类?

时间:2016-09-01 06:33:49

标签: modelmapper

我想映射到一个源目标,该目标只有一个带有3个参数的构造函数。我收到以下错误:

  

无法实例化目标com.novasol.bookingflow.api.entities.order.Rate的实例。确保com.novasol.bookingflow.api.entities.order.Rate具有非私有无参数构造函数。

当我在源目标中插入一个no-args构造函数时,它会起作用,但是这会导致滥用该类,所以我宁愿不这样做。

我尝试过使用转换器,但这似乎不起作用:

Converter<RateDTO, Rate> rateConverter = new AbstractConverter<RateDTO, Rate>() {
    protected Rate convert(RateDTO source) {
        CurrencyAndAmount price = new CurrencyAndAmount(source.getPrice().getCurrencyCode(), source.getPrice().getAmount());
        Rate rate = new Rate(price, source.getPaymentDate(), source.getPaymentId());
        return rate;
    }
};

是否可以告诉modelmapper如何使用no no-args构造函数映射到目标?

1 个答案:

答案 0 :(得分:3)

这似乎可以解决问题:

    TypeMap<RateDTO, Rate> rateDTORateTypeMap = modelMapper.getTypeMap(RateDTO.class, Rate.class);
    if(rateDTORateTypeMap == null) {
        rateDTORateTypeMap = modelMapper.createTypeMap(RateDTO.class, Rate.class);
    }
    rateDTORateTypeMap.setProvider(request -> {
        RateDTO source = RateDTO.class.cast(request.getSource());
        CurrencyAndAmount price = new CurrencyAndAmount(source.getPrice().getCurrencyCode(), source.getPrice().getAmount());
        return new Rate(price, source.getPaymentDate(), source.getPaymentId());
    });