lombok.Data引发的问题

  • Post author:
  • Post category:其他

点击关注我的博客原文

大家应该都用过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 版权协议,转载请附上原文出处链接和本声明。