项目场景:前后端联调
问题描述
前端发送数据给后端,后端只得部分数据
前端代码:
前端总共有四个数据,统一封装到form表单里面,并发送给后端
前端form表单:
form: {
cid: '',
cName: '',
count: '',
},
前端axios请求:
// 编辑
this.$axios.post('/classification/update', this.form,
{
headers: {
"Authorization": this.$store.getters.getToken
},
}).then((res) => {
this.$message.success('编辑成功');
this.dialogVisible = false;
this.getlist();
}).catch((err) => {
this.$message.error(res.data.msg);
});
抓包结果:前端已发送数据,cName已有数据
后端代码类别类代码:
import lombok.Data;
/**
* 类别类
*/
@Data
public class Classification {
//类别ID
private Long cid;
//类别名称
private String cName;
//借阅量
private int count;
//状态
private int status;
}
后端接收代码:
@RequestMapping("/update")
public String update(@RequestBody Classification classification) {
//1.判断非空
if (classification == null) {
return JSON.toJSONString(AjaxResult.fail(-1, "数据错误"));
}
//2.操作
int result = classificationService.update(classification);
return JSON.toJSONString(AjaxResult.success(result));
}
后端打印:
打印结果:显示cName为空
原因分析:
产生原因:是lombok生成的getter,setter方法产生问题,在代码中lombok的get方法为 getCName()
但是实际上在类别中,构造的getter,setter方法是getcName()
,所以后端获取的数据为空
解决方案:
解决方案一:更改属性名,即cName改成classificationName
Lombok:
类别中的构造:
以上均同步
解决方案二:在这个类别中,单独构造getter,setter方法,当你所涉及的方法比较多时
此时再发送数据
抓包结果:
后端打印结果:
总结
在Java后端中,类别的变量声明时,首字母不要小写或者大写,大写也是类似的结果,从而避免类似的错误。