Lombook 插件与 xXxx 格式命名变量带来的问题

Lombook 插件与 xXxx 格式命名变量带来的问题

使用 Lombok 插件时,JavaBean 命名需要注意一个地方:

变量名命名最好是不要「第二个字母大写」,如:iPhone,应该写成 iphone。

JavaBean 的规范是第二个字母不能大写,如果第二个字母大写那么 getter / setter 方法我们想象中的应该会是这样:

getIPhone() / setIPhone()

因为根据 JavaBean 规范,get / set 方法是取每个属性的第一个字母转大写其他字母不变,这也是 lombok 插件自动生成 getter / setter 的样子,比如:

但是请注意:这样写会导致一些问题!!!!首先 Spring 是不认识的,Jackson 的解析也是会和我们的期望值不一样的。

我们希望返回的 json 字段是和属性名一样如:iPhone,但是此时我们的 getter 方法是这样的:「getIPhone()」,jackson 会根据方法名作为 key,根据方法返回的值作为 value,生成 json 字符串,结果是:

1
2
3
{
"iphone": "xxx"
}

这显然不是前端需要的。


让我们去掉 lombok@Data 注解,使用 IDEA 自动生成的 getter / setter 方法看看:

注意到了没?编辑器生成的方法是没做任何处理的,直接把变量名拼接到 get / set 后面,此时 Jackson 根据方法名获取到的 key 是:sCard,json 串也就理所当然是:

1
{"sCardNum":"xxx"}

而不是

1
{"scardNum":"xxx"}

IDE 和 Spring 和 Jackson 这样做是不符合 JavaBean 规范的,但是大厂都是这么用的,我们也默认习惯了这样用。Lombok 为了遵循 JavaBean 规范与这种大的框架反其道而行之使得我们遇到一些坑。

所以解决办法有:

  1. 遵循约定大于配置原则,不使用 xXxx 命令方式。但是如果非要这样做,请看以下:
  2. 修改 lombok 源码,不推荐,破坏依赖管理,成本高。
  3. 继续使用 @Data 注解,但是有第二个字母大写的属性就自己通过工具生成一下 get / set 方法即可,会覆盖掉 lombok 生成的,无需担心。

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×