
使用Lombok首字母小写,第二个字母大写的属性无法注入
使用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.
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 zane
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果