kotlin的mapstruct的使用案例,将一个对象转化为另一个对象

当项目开发中涉及到dto的对象之间的转化,如下图所示,将grep中的cmdb.product转化为CmdbProduct对象,如下图所示:

return cmdbGrpcClient.list(
			Cmdb.ListRequest.newBuilder().setProduct(cmdbProduct).build()
		).productsList.map { product ->
			CmdbProduct(
				skuId = product.skuId,
				fastoneStrategy = product.fastoneStrategy,
				productLevel = product.productLevel,
				fastoneRegion = product.fastoneRegion,
				vendor = product.vendor,
				productType = ProductType.valueOf(product.productType),
				systemPlatform = SystemPlatform.valueOf(product.systemPlatform),
				fastoneModel = product.fastoneModel,
				fastoneFamily = product.fastoneFamily,
				vendorModel = product.vendorModel,
				payType = product.payType,
				price = product.price.toBigDecimal(),
				priceUnit = product.priceUnit,
				effectiveTime = product.effectiveTime,
				fastoneType = product.fastoneType,
				core = product.core.toInt(),
				vCpu = product.vCpu.toInt(),
				memory = product.memory.toInt(),
				gpu = takeIf { product.gpu != "" }?.let { Integer.valueOf(product.gpu) } ?: 0,
				gpuMemory = takeIf { product.gpuMemory != "" }?.let { Integer.valueOf(product.gpuMemory) } ?: 0,
				gpuType = product.gpuType,
				networkBandwidth = product.networkBandwidth,
				networkBandwidthUnit = product.networkBandwidthUnit,
				temporaryStorage = product.temporaryStorage,
				storageUnit = product.storageUnit,
				cpuModel = product.cpuModel,
				cpuFrequency = product.cpuFrequency,
				throughput = product.throughput,
				throughputUnit = product.throughputUnit,
				iops = product.iops,
				iopsUnit = product.iopsUnit,
				protocol = product.protocol,
				remark = product.remark,
				shutdownable = product.shutdownable
			)
		}

但是这种方法,如果遇到类很大,并且字段都一样的实体,就会显得很臃肿。
现在介绍一种更好的方法:mapstruct

return cmdbGrpcClient.list(
			Cmdb.ListRequest.newBuilder().setProduct(cmdbProduct).build()
		).productsList.map { product ->
			CmdbProductConverterImpl().convertToCmdbProduct(product)
		}

上面的代码转化为一句话

CmdbProductConverterImpl().convertToCmdbProduct(product)

如何实现的呢?

第一、定义interface 能力

@Mapper
interface CmdbProductConverter {

	fun convertToCmdbProduct(product: Cmdb.Product): CmdbProduct
}

第二、idea bulid 产生CmdbProductConverterImpl()方法

在这里插入图片描述

第三、在使用的地方就直接使用CmdbProductConverterImpl()进行转化

return cmdbGrpcClient.list(
			Cmdb.ListRequest.newBuilder().setProduct(cmdbProduct).build()
		).productsList.map { product ->
			CmdbProductConverterImpl().convertToCmdbProduct(product)
		}

具体使用方法,可以参考:
https://blog.csdn.net/qq_40194399/article/details/110162124

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值