大家应该都用过lombok,它是个好东西,它可以为我们实体类自动添加getter/setter方法、构造器以及toString等方法,它的使用方法和好处不是这里讨论的重点。我这里要说明的是使用它的@Data方法自动生成getter/setter后,引发的问题,比如我有个实体类:

1
2
3
4
5
6
7
8
9
10
@Data
public class Test {

private Integer id;

private Integer pId;

private String name;

}

客户端传来这个对象的json,字段和Test字段一样,重点是这个pId却无法接收到,我们来写下测试的controller:

1
2
3
4
5
6
7
8
9
@RestController
public class TestController {

@PostMapping(value = "testData",produces = "application/json")
private Test testData(@RequestBody Test test){
return test;
}

}

testData方法很简单,原则上客户端传来啥,就返回啥,我们先用postman工具测试下这个接口:
图片

主要看result里的内容:

1
2
3
4
5
6
7
8
9
10
{
    "status": 200,
    "message": "请求成功!",
    "result": {
        "id": 1,
        "name": "测试@data",
        "pid": null
    },
    "timestamp": 1562221070780
}

什么情况,pId没有值也就罢了,可是pId也变成了pid。然后我查找了相关javaBean规范相关内容,javabean生成规则如下:

①、一般情况,把除去get或者is(如果是boolean类型)后的部分首字母转成小写即可,比如:getFoo –> foo
如果除去get和is后端的部分,首字母和第二个字母都是大写,不作转换即可,比如:getXPath –> XPath

还有一些意向不到的生成规则(你能猜对多少):

1
2
3
4
5
6
7
8
9
10
11
12
13
private String getepath  --> getGetepath()
private String getEpath  --> getGetEpath()
private String epath --> getEpath()     
private String ePath  --> getePath() // 首字母不用大写
private String Epath  --> getEpath() //和epath的getter方法是一样的
private String EPath     --> getEPath()

private boolean isenable   --> isIsenable()
private boolean isEnable   --> isEnable() // 不是把首字母大写并在前面加is
private boolean enable     --> isEnable()
private boolean eNable     --> iseNable()    // 首字母不用大写
private boolean Enable     --> isEnable()    // 和enable的getter方法相同
private boolean ENable     --> isENable()    //

我们看到pId就是类似第四行的ePath,它的getter方法应该是getpId()。我们看看@Data给我们自动生成:
图片
getter方法并不是getpId(),而是getPId(),这是不是lombok坑,所有我们修改下Test类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Data
public class Test {

private Integer id;

private Integer pId;

private String name;

public Integer getpId() {
return pId;
}

public void setpId(Integer pId) {
this.pId = pId;
}
}

这样就正常了:
图片

最后更新: 2019年07月04日 15:19

原始链接: https://www.sunnymaple.cn/2019/07/04/lombok.Data引发的问题/

× 请我吃糖~
打赏二维码