踩坑指南-接口返回前端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. 為什么我本機上沒有實現序列化仍然可以實現前后端數據的傳輸;

是因為我前端后端都在本機實現,沒有通過網絡傳輸數據,都在內存中就傳輸了,所以數據不需要序列化也可以。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM