踩坑指南-接口返回前端json数据报错前端无法接收到

问题背景:

自己通过JQUERY的ajax向后端请求,后端接口返回值是一个自定义的类,发现无法返回给前端。

后端代码如下:

 @PostMapping(path = "/save",produces = "application/json;charset=utf-8")
    @ResponseBody
    //@Validated
    public JsonResult form(Permission permission, BindingResult br){
        log.info("permission form save :{}",permission);
        if(!br.hasErrors()){
            permissionDao.save(permission);
            return JsonResult.success("保存成功!");
        }else {
            return JsonResult.error("保存失败!");
        }
    }


public final class JsonResult implements Serializable {
    private static final long serialVersionUID = 1L;
    private String resultCode;
    private String msg;

    public JsonResult() {
    }

    public JsonResult(String resultCode,String msg) {
        this.resultCode = resultCode;
        this.msg = msg;
    }

    public static JsonResult success(String msg){
        return new JsonResult(Constants.SUCCESS_CODE,msg);
    }
    public static JsonResult error(String msg){
        return new JsonResult(Constants.ERROR_CODE,msg);
    }
}

按道理后端接口加了@ResponseBody注解,会将返回的对象转化为json格式的字符串返回给前端。但是报错如下:

然后搜索发现是因为@ResponseBody注解将对象转换为json时候自定义的对象类必须得有set,get方法,否则会报错。

以下疑惑出现

1. 为什么需要get.set方法才能将接口返回值转为json,后面看下源码实现;

2. 接口返回值如果是自定义类的对象,那么是不是必须得实现序列化,要深入理解下序列化;

因为内存中的数据要在网络中传输,必须得能够保存到硬盘磁盘中,所以需要实现序列化,但是问题3是为什么?

3. 为什么我本机上没有实现序列化仍然可以实现前后端数据的传输;

是因为我前端后端都在本机实现,没有通过网络传输数据,都在内存中就传输了,所以数据不需要序列化也可以。
posted @ 2021-12-26 18:58  ethanSung  阅读(1515)  评论(0编辑  收藏  举报