Skip to content

Lombok首字母小写,第二个字母大写造成的参数无法接收问题

  • 问题描述:如果VO实体类使用@Data注解生成get/set方法,对于eMail这种首字母小写、第二个字母大写的成员变量,@RequestBody无法完成自动映射,获取到的值为null

    image-20250224172256401

    image-20250224172310799

  • 问题原因:系统框架使用的json框架是springboot自带的jackson,以eMail字段为例,使用lombok生成的get/set方法是getEMail/setEMail,jackson在解析json的底层逻辑是,找到该实体类的get/set方法,去掉前面三个字母,拿到了的属性为EMail,但这不算完,他会去找第一个小写字母,如果首字母是大写,会先将第一个字母小写,接着往后找,如果后面还有大写字母继续转成小写字母,直到碰见第一个小写字母,就将后面的所有部分带过来,从而得到的结果是email,他认为这个才是正确的json属性,而不是eMail

  • 解决方法

    1. 方法一:手动实现该字段的get/set方法

      java
      // lombok生成的set
      public void seteMail(String eMail) {
          this.eMail = eMail;
      }
      
      // lombok生成的get
      public String geteMail() {
          return this.eMail;
      }
    2. 方法二:使用JsonProperty("eMail")强制框架在反序列化的时候,使用json数据中的eMail给字段赋值

      java
      @JsonProperty("eMail")
      private String eMail;
  • 参考文档

MIT版权,未经许可禁止任何形式的转载