Warning:(X,X) java: Unmapped target property: "vCpu".
今天开发项目,将grpc的DTO实体转化本地的DTO实体,实体的样子是这样的
class CmdbProduct(
val skuId: String,
val fastoneStrategy: String?,
val productLevel: String?,
val fastoneRegion: String,
val vendor: String?,
val productType: ProductType,
val systemPlatform: SystemPlatform,
val fastoneModel: String,
val fastoneFamily: String?,
val vendorModel: String?,
val payType: String?,
val price: BigDecimal,
val priceUnit: String?,
val effectiveTime: String?,
val fastoneType: String,
val core: Int?,
val vCpu: Int?,
val memory: Int?,
....
)
这里有个vCpu死活对不上,不能被解析,自动生成的代码也没有setvCpu的代码
网上的解释:
由于 MapStruct 在编译时运行,它可以比动态映射框架更快。如果映射不完整,它也可以生成错误报告——也就是说,如果不是所有的目标属性都被映射:
Warning:(X,X) java: Unmapped target property: "propertyName".
但是vCpu涉及到关键的代码,必须要要有。
后来同事指点,因为vCpu命名的问题,没有走驼峰。所以才会出现这个问题
一般JavaBean属性以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。例如:属性名为userName,其对应的getter/setter 方法是 getUserName/setUserName。
但是,还有一些特殊情况:
1、如果属性名的第二个字母大写,那么该属性名直接用作 getter/setter 方法中 get/set 的后部分,就是说大小写不变。例如属性名为uName,方法是getuName/setuName。
2、如果属性名的前两个字母是大写(一般的专有名词和缩略词都会大写),也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为URL,方法是getURL/setURL。
3、如果属性名的首字母大写,也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为Name,方法是getName/setName,这种是最糟糕的情况,会找不到属性出错,因为默认的属性名是name。
4、如果属性名以"is"开头,则getter方法会省掉get,set方法会去掉is。例如属性名为isOK,方法是isOK/setOK。
需要注意的是有些开发工具自动生成的getter/setter方法,并没有考虑到上面所说的特例情况,会导致bug的产生。
结论来了:在定义JavaBean的属性名时
1、尽量避免属性名的头两个字母中任意一个为大写
所以将转化的代码做了修改,此问题得以修复
创作打卡挑战赛
赢取流量/现金/CSDN周边激励大奖
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/sunyuhua_keyboard/article/details/124870840
内容来源于网络,如有侵权,请联系作者删除!