踩坑指南-接口返回前端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. 为什么我本机上没有实现序列化仍然可以实现前后端数据的传输;
是因为我前端后端都在本机实现,没有通过网络传输数据,都在内存中就传输了,所以数据不需要序列化也可以。