场景
在使用Lombok注解时,需要注意其驼峰式命名的注意事项。
比如字段属性为:
public class TestRequest {
private String aTypeId;
}
如果JDK给生成的get和set方法,会是
public String getaTypeId() {
return aTypeId;
}
public void setaTypeId(String aTypeId) {
this.aTypeId = aTypeId;
}
但是如果使用Lombok注解生成的get和set方法是
public String getATypeId() {
return this.aTypeId;
}
public void setATypeId(String aTypeId) {
this.aTypeId = aTypeId;
}
这样造成的问题可能会导致调用set方法是赋值失效。
假如不规范的字段命名,又使用了@Data注解,然后实体用在controller的请求参数中,比如:
@PostMapping("/lombok")
public String LombokTest(@RequestBody TestRequest request) {
System.out.println(request);
return "1";
}
那在调用接口时,如果传递的json数据为
{
"aTypeId":"aaaa"
}
则会出现无法获取对应值的情况

注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
实现
一、问题根源分析
Lombok生成方法规则
字段 aTypeId → 生成的getter/setter为 getATypeId() 和 setATypeId()(首字母大写)
符合JavaBean规范但不符合JSON默认命名策略
JSON反序列化要求
大多数JSON库(如Jackson)默认期望:
{"aTypeId": "value"} // 对应 getaTypeId()/setaTypeId()
实际生成的 getATypeId() 方法名导致属性无法识别
编译结果验证
从反编译代码可见,生成的getter方法首字母大写
二、解决方案(3种方式)
方案1:使用@JsonProperty注解(推荐)
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class TestRequest {
@JsonProperty("aTypeId") // 显式指定JSON字段名
private String aTypeId;
}
测试验证

方案2:修改Lombok配置(全局生效)
在lombok.config 文件中添加:
# 强制使用小写字母开头的getter/setter
lombok.accessors.fluent=true
方案3:调整字段命名(符合默认规则)
@Data
public class TestRequest {
private String atypeId; // 改为全小写开头
}

514

被折叠的 条评论
为什么被折叠?



