【VUE+SpringBoot】前端获取到的数据与后台从数据库中获取到的数据不一致

问题

后台从数据库中查询到的数据,转换成JSON字符串传到前端后,缺少部分字段。

1
2
3
4
5
6
@RequestMapping("/getUpdateUser")
public String getUpdateUser(int id) {
User user = userDao.getUpdateUser(id);
String string = JSON.toJSONString(user);
return string;
}
1
2
3
4
5
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方法不对头,如下:
    1
    2
    3
    4
    5
    private boolean state; // 状态

    public boolean isState() {
    return state;
    }
    并不是我们平常的get方法:
    1
    2
    3
    public boolean getState() {
    return state;
    }
    这就导致JSON将User对象转换成json字符串时,无法通过反射获取到其state字段,最终给前端的json数据也就没有该字段。

    处理

    重写实体类User的get、set方法并检验,确保不再出错。重启后,测试显示正常。

    归纳

    对于布尔类型的成员变量,在使用IDEA生成get方法后,需要进行修改。否则,将无法通过一般的反射获取其全部成员变量,项目容易出问题。