这是一个关于实体类的cId,到了前台却变成了cid的问题
问题再现
今天写项目的途中发现了一个问题:
@Data
@TableName("tb_book")
@ApiModel("图书")
public class Book implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty("图书id")
private Long id;
@ApiModelProperty("图书名")
private String title;
@ApiModelProperty("简介")
private String info;
@ApiModelProperty("类别Id")
private Long cId;
}
这是我的实体类,然后我在postman请求获取图书列表的时候出现了这种情况:
细心的小伙伴可以看出来,我的“类别Id”这一项应该是cId,但是我请求到的是cid,I从大写变成了小写
尝试解决
然后我尝试手写GetSet方法
@Data
@TableName("tb_book")
@ApiModel("图书")
public class Book implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty("图书id")
private Long id;
@ApiModelProperty("图书名")
private String title;
@ApiModelProperty("简介")
private String info;
@ApiModelProperty("类别Id")
private Long cId;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public Long getcId() {
return cId;
}
public void setcId(Long cId) {
this.cId = cId;
}
}
然后就好了
原因
经过查资料发现,SpringMVC默认使用jackson解析json,jackson又依赖于实体类的get/set方法,通过lombok生成的方法是
而手写的是
两个方法名不一样,所以出现了json解析出i变小写的问题
事后尝试
在找到问题所在之后,我又进行了尝试,给实体类中cId这个字段起了个别名
@ApiModelProperty("类别Id")
@JsonProperty("cId")
private Long cId;
发现,使用lombok,最后postman里面请求的是cId正常了
总结
这次的问题可能是因为lombok的生成规则和idea的快捷键生成的get/set方法不太一样
解决办法
1.手写get/set方法
2.使用别名@JsonProperty("cId")
3.使用lombok时,避免一个小写字母接一个大写字母这种实体类
查其他资料发现的问题
像NICKName这种不符合驼峰命名的名字,最后会变成nickname