大家应该都用过lombok,它是个好东西,它可以为我们实体类自动添加getter/setter方法、构造器以及toString等方法,它的使用方法和好处不是这里讨论的重点。我这里要说明的是使用它的@Data方法自动生成getter/setter后,引发的问题,比如我有个实体类:
@Data
public class Test {
private Integer id;
private Integer pId;
private String name;
}
客户端传来这个对象的json,字段和Test字段一样,重点是这个pId却无法接收到,我们来写下测试的controller:
@RestController
public class TestController {
@PostMapping(value = "testData",produces = "application/json")
private Test testData(@RequestBody Test test){
return test;
}
}
testData方法很简单,原则上客户端传来啥,就返回啥,我们先用postman工具测试下这个接口:
主要看result里的内容:
{
"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
还有一些意向不到的生成规则(你能猜对多少):
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类:
@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;
}
}
这样就正常了:
版权声明:本文为u012105931原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。