启动项目时发现报错 java: Can’t map property “BigDecimal product.price” to “Money product.price”. Consider to declare/implement a mapping method: “Money map(BigDecimal value)”.
原因是子类转换类型不一致。正确的写法如下:
// 前端传递的类
public class AddOrderParameter {
private List<ProductDTO> products;
// Money为自定义类型
@Mapper(imports = {Money.class})
public static class ProductDTO {
private String name;
private BigDecimal price;
private Integer count;
@Mapper
public interface ProductDTOMapper {
ProductDTOMapper INSTANCE = Mappers.getMapper(ProductDTOMapper.class);
// 自定义转换,这里Money.from()是自定义方法,返回的是Optional类型
@Mapping(target = "price", expression = "java(Money.from(meterInfo.getPrice()).get())")
Order.Product to(ProductDTO productDTO);
List<Order.Product> to(List<ProductDTO> productDTOs);
}
}
// 注意不要漏,不然一直报错
@Mapper(uses = {ProductDTO.ProductDTOMapper.class})
public interface Convert {
Convert INSTANCE = Mappers.getMapper(Convert.class);
Order to(AddOrderParameter parameter);
}
}
// 转换的类
public class Order {
private List<Product> products;
public static class Product {
private String name;
private Money price;
private Integer count;
}
}