Lombok在前后端交互时因为JavaBean中get/set导致字段大小写不一致的问题,一般常见的字段遵循驼峰命名没有任何问题,但一些特殊的字段比如cId传到前端却变成了cid,导致字段不一致,赋值出现问题,归根结底是get/set出现了问题。
1、JavaBean的生成规则
JavaBean定义:一种JAVA语言写成的可重用组件,通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。
主要规则:
- 必须有 一个无参构造且为public
- 必须为公共类 public
- 不应有公共实例属性,属性都为private,且以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。例如:属性名为userName,其对应的getter/setter 方法是 getUserName/setUserName。
- 可通过IDE(Eclipse、IDEA) 为属性生成getter/setter 方法
- 如果属性名的第二个字母大写,那么该属性名直接用getter/setter 方法中 get/set 的后部分,就是说大小写不变。例如属性名uName,方法是getuName/setuName。
- 如果属性中字母均是大写(一般的专有名词和缩略词都会大写),也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为URL,方法是getURL/setURL。
- 如果首字母大写,也是属性名直接用作 get/set 方法中 get/set 的后部分。例如属性名为Name,方法是getName/setName,这种是最糟糕的情况,会找不到属性出错,因为默认的属性名是name。
private Integer cId;
//get/set
public Integer getcId() {
return cId;
}
public void setcId(Integer cId) {
this.cId = cId;
}
//最后得到cId
2、Lombok的生成规则
一句话get/set都会将首字母大写
@Data
public class JavaBean{
private Integer cId;
//lombok帮你生成的
public Integer getCId() {
return cId;
}
//lombok帮你生成的
public void setCId(Integer cId) {
this.cId = cId;
}
//最后通过lombok得到cid
}
3、如何解决问题
前后端字母大小写不一致问题归根结底就是你在项目中使用lombok了原因。解决方案有两个:
方法一: 去掉lombok中的@Data注解,手动导入get/set方法
方法二:在JavaBean中通过@JsonProperty强制定义
@JsonProperty("cId")
//本来得到的是cid,通过这个注解可以强制得到cId
private Integer cId;
4、总结
细节决定一切!