现在大多数公司项目框架,基本都是属于前后端分离模式,这种模式会涉及到一个前后端对接问题,无论是对前端或者是后台服务,维护一套完善且规范的接口是非常有必要的,这样不仅能够提高对接效率,也可以让我的代码看起来更加简洁优雅
。
修改前后最大的区别是我们不用在每个接口单独捕获异常,也不用在每个接口都要组装一遍返回参数,可以参考下面这张对比图:
一、SpringBoot不使用统一返回格式
默认情况下,SpringBoot会有如下三种返回情况。
1.1 字符串
@GetMapping("/getUserName")
public String getUserName(){
return "HuaGe";
}
调用接口返回结果:
HuaGe
1.2 实体类
@GetMapping("/getUserName")
public User getUserName(){
return new User("HuaGe",18,"男");
}
调用接口返回结果:
{
"name": "HuaGe",
"age": "18",
"性别": "男",
}
1.3异常返回
@GetMapping("/getUserName")
public static String getUserName(){
HashMap hashMap = Maps.newHashMap();
return hashMap.get(0).toString();
}
模拟一个空指针异常,在不做任何异常处理的情况下,可以看下SpringBoot的默认返回结果:
{
"timestamp": "2021-08-09T06:56:41.524+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/sysUser/getUserName"
}
对于上面这几种情况,如果整个项目没有定义统一的返回格式,五个后台开发人员定义五种返回格式,这样不仅代码臃肿,前后端对接效率低
,而且还会有一些意向不到的情况发生,比如前端直接显示异常详情等,这给用户的体验是非常差的。
二、基础玩法
项目中最常见到的是封装一个工具类,类中定义需要返回的字段信息,把需要返回前端的接口信息,通过该类进行封装,这样就可以解决返回格式不统一的现象了。
2.1 参数说明
- code: 状态码,后台可以维护一套统一的状态码;
- message: 描述信息,接口调用成功/失败的提示信息;
- data: 返回数据。
2.2 流程说明
- 新建Result类
public class Result<T> {
private int code;
private String message;
private T data;
public Result() {}
public Result(int code, String message) {
this.code = code;
this.message = message;