踩过的坑-lombok插件@Data问题

559 阅读1分钟

背景: 使用了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只考虑了普通的命名规则,对这种不合法的命名(开头两个字符不能一个大写一个小写)没有兼容