mapstruct类型转换报错

启动项目时发现报错 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;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于MapStruct类型转换,您可以按照以下步骤进行操作: 1. 首先,在您的项目中添加MapStruct依赖。您可以在Maven或Gradle构建工具中添加相应的依赖项。 2. 创建源类型(source type)和目标类型(target type),这些类型可以是POJO(普通Java对象)。 3. 在源类型和目标类型之间创建一个Mapper接口。该接口应该使用`@Mapper`注解进行标记,并且可以定义多个转换方法。 4. 在转换方法中,使用`@Mapping`注解指定源类型和目标类型之间的映射关系。您可以使用属性名称、表达式或自定义转换器来定义映射规则。 5. 在您的代码中使用`Mapper`接口生成的实现类,通过调用转换方法进行类型转换。 下面是一个简单的示例: ```java // 源类型 public class Source { private String name; private int age; // getter和setter方法省略 } // 目标类型 public class Target { private String fullName; private int yearsOld; // getter和setter方法省略 } // Mapper接口 @Mapper public interface SourceTargetMapper { @Mapping(source = "name", target = "fullName") @Mapping(source = "age", target = "yearsOld") Target sourceToTarget(Source source); } // 使用转换器 public class Main { public static void main(String[] args) { Source source = new Source(); source.setName("John"); source.setAge(25); SourceTargetMapper mapper = Mappers.getMapper(SourceTargetMapper.class); Target target = mapper.sourceToTarget(source); System.out.println(target.getFullName()); // 输出: John System.out.println(target.getYearsOld()); // 输出: 25 } } ``` 通过以上步骤,您可以使用MapStruct进行源类型和目标类型之间的转换。请注意,MapStruct还支持更复杂的转换场景,例如集合映射和嵌套映射。您可以在MapStruct的官方文档中了解更多详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值