Сопоставление свойства с использованием выражения MapStructs - PullRequest
0 голосов
/ 26 февраля 2019
class Product {
    Object obj;
}

class Object {
    Float amount;
}

class ObjectDto {
    Integer price;
}

class ProductMapper{

    @Mapping(expression = "java(this.convert(dto.getObject().getPrice(), decimals))", target = "object.amount")
    public abstract Product(ProductDto dto, decimals);

    protected Float convert(Integer price, decimals){
        price.floatValue();
    }
}

Я пытаюсь отобразить с помощью выражения Mapstruct целое число в число с плавающей точкой, передавая функции параметры и десятичные числа, но когда генерируется реализация, не поступает правильно параметр "десятичные числа", и я не могу отобразить его.

Это возможно?

Код реализации выглядит так:

class ProductMapperImpl {
    method(ObjectDto objectDto, Integer decimals){
        product.setObject(objectDtoToObject(dto.getObject()));
    }
    Object objectDtoToObject(ObjectDto objectDto){
        Object obj = new Object();
        obj.setAmount (this.convert(objectDto.getPrice());
    }
}

1 Ответ

0 голосов
/ 02 марта 2019

Итак, что по этому поводу (это то, что я имел в виду изначально):


@Mapper
public abstract class ProductMapper{

    @Mapping( target = "amount", source = "object.price" ); 
    public abstract Product toProduct(ProductDto dto, @Context Integer decimals);

    public Float createPrice(Integer price, @Context Integer decimals) {
       // do some Float stuff here
    }

}

Кстати: я бы не использовал Float для суммы, но всегда BigDecimal .. Просто гуглите по float / amount..

...