Расчеты ModelMapper

Я пытаюсь использовать ModelMapper для вычисления свойств в процессе сопоставления. Возможно ли это, поскольку это не работает, как я ожидал.

PropertyMap<com.fmg.myfluent.domain.Quote, ClientQuote> personMap = new     
    PropertyMap<com.fmg.myfluent.domain.Quote, ClientQuote>() {
       protected void configure() {
          map().setTotalLoan(source.getTotalPayable());
          // monthlyRate NOT Working!
          map().setMonthlyRate((source.getAnnualRate()/12));
       }
    };

Я ожидаю, что месячная ставка будет равна годовой ставке / 12. Однако месячная ставка устанавливается на годовую ставку без расчета.

Ожидать:

 Annual Rate = 12, Monthly Rate: 1

Действительный:

Annual Rate = 12, Monthly Rate: 12


person Garry Taylor    schedule 30.07.2018    source источник


Ответы (1)


Вам нужно добавить ручной конвертер для преобразования значения в ModelMapper

Converter<Integer, Integer> annualToMonthlyConverter = ctx -> ctx.getSource() == 0 ? 0 : ctx.getSource() / 12;

Теперь используйте этот конвертер, чтобы преобразовать исходное годовое поле в целевое ежемесячное поле.

PropertyMap<Source, Target> personMap = new
            PropertyMap<Source, Target>() {
                protected void configure() {
                    map().setAnnual(source.getAnnual());

                    using(annualToMonthlyConverter).map(source.getAnnual(), destination.getMonthly());
                }
            };

Примечание.

Просто идея, согласно вашему дизайну, вы также можете отображать только годовое поле источника, а затем возвращать annual/12 из получателя monthly вашего целевого класса.

public int getMonthly() {
    return annual / 12;
}
person Deb    schedule 30.07.2018
comment
Спасибо Debmalya, это то, что я искал. Я пытался использовать конвертер, но забыл/пропустил карту! - person Garry Taylor; 30.07.2018
comment
Я рад, что это помогло. Пожалуйста, примите ответ, если вы считаете, что это полезно. Спасибо - person Deb; 30.07.2018