使用Lombok首字母小写,第二个字母大写的属性无法注入

问题: 首字母小写,第二个字母大写的属性无法注入

domain

@Data
public class TestDemo {
    
    private String aName;
    
    private String bPassword;
​
    private String myEmail;
​
}

controller

@PostMapping("/testLombok")
public TestDemo testLombok(@RequestBody TestDemo testDemo) {
    return testDemo;
}

apipost

响应的对象中的属性名已经发生改变,值为null。怀疑@Data的问题。

排查原因

比较Lombok生成和idea生成的getter、setter方法

首字母小写,第二个字母大写的属性

  • idea生成的是首字母小写

  • Lombok生成的首字母大写

原因:对于首字母小写,第二个字母大写的属性,Lombok生成的getter、setter方法名与idea生成的方法名不一致。Spring与idea按照Java Bean规范进行生成首字母小写,忽略lombok首字母大写的getter、setter方法名。

解决方案:

1. 使用idea生成首字母小写,第二个字母大写的属性的getter、setter。Lombok会识别跳过。

2. 使用@JsonProperty在序列化、反序列化时指定名称

domain

@Data
public class TestDemo {
​
    @JsonProperty("aName")
    private String aName;
​
    @JsonProperty("bPassword")
    private String bPassword;
​
    private String myEmail;
​
}

apipost

Lombok解释

Change lombok's property capitalization code.

lombok解决方案

只需手动生成需要指定大小写的属性的getter/setter即可。Lombok 会看到它并认识到您显然需要这种替代:

@Getter 
private String xName;
​
// write out the getter explicitly:
public String getxName() { ... }
// .. and lombok will not generate getXName.