问题
后台从数据库中查询到的数据,转换成JSON字符串传到前端后,缺少部分字段。
@RequestMapping("/getUpdateUser")
public String getUpdateUser(int id) {
User user = userDao.getUpdateUser(id);
String string = JSON.toJSONString(user);
return string;
}
async showEditDialog(id) {
const {data: res} = await this.$http.get("/getUpdateUser?id="+id);
this.editForm = res;// 查询用户信息,回填用户编辑表单
this.editDialogVisible = true;
},
思路
- 打印出后台从数据库中查询出的数据,发现字段是完整的,并无缺失。
- 打印JSON字符串,发现缺少字段,定位到问题入口。
- 查看JSON.toJSONString()方法后,并未发现异常。
- 将该模块的所有文件重新审阅一遍后发现,实体类User.java中有个布尔类型的成员变量的get方法不对头,如下:
private boolean state; // 状态
public boolean isState() {
return state;
}
并不是我们平常的get方法:
public boolean getState() {
return state;
}
这就导致JSON将User对象转换成json字符串时,无法通过反射获取到其state字段,最终给前端的json数据也就没有该字段。
处理
重写实体类User的get、set方法并检验,确保不再出错。重启后,测试显示正常。
归纳
对于布尔类型的成员变量,在使用IDEA生成get方法后,需要进行修改。否则,将无法通过一般的反射获取其全部成员变量,项目容易出问题。