問題背景:
自己通過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. 為什么我本機上沒有實現序列化仍然可以實現前后端數據的傳輸;
是因為我前端后端都在本機實現,沒有通過網絡傳輸數據,都在內存中就傳輸了,所以數據不需要序列化也可以。