背景: 使用了LomBok插件的Controller层的实体类中的vBeginTime和vEndTime两个字段接收前端参数一直为null
查找思路:
- 两个字段类型都是String,所以不存在日期格式问题。并且该实体类中还有inBeginTime和inEndTime字段是可以接收到参数的;
- 对比发现,程序中开头为“小写字母+大写字母”的字段都不能接收到参数,不管是vBeginTime还是iOrderTime;
猜测实体类的参数是由反射调用set方法去设值,去掉lombok的@Data注解(该注解自动生成get、set方法),使用原生的set、get方法,发现vBeginTime的set方法为:
// 注意是小写的v
public String getvBeginTime() {
return vBeginTime;
}
public void setvBeginTime(String vBeginTime) {
this.vBeginTime = vBeginTime;
}
public String getvEndTime() {
return vEndTime;
}
public void setvEndTime(String vEndTime) {
this.vEndTime = vEndTime;
}
而lombok方法生成的set、get方法是 getVBeginTime和setVBeginTime,可以从以下方法中验证:
由此可见,lombok只考虑了普通的命名规则,对这种不合法的命名(开头两个字符不能一个大写一个小写)没有兼容