zoukankan      html  css  js  c++  java
  • 踩坑指南接口返回前端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. 为什么我本机上没有实现序列化仍然可以实现前后端数据的传输;

    是因为我前端后端都在本机实现,没有通过网络传输数据,都在内存中就传输了,所以数据不需要序列化也可以。
  • 相关阅读:
    servlet里的forward和redirect的区别
    JSP九大内置对象
    float和Float的区别
    Throwable相关知识1
    常见异常和错误总结
    final/finalize/finally的区别
    mysql命令大全
    mongodb安装
    mysql编译安装(详细)
    mysql的三种安装方式(详细)
  • 原文地址:https://www.cnblogs.com/ethanSung/p/15733727.html
Copyright © 2011-2022 走看看