前后端统一结果集封装
发布于: 2020 年 07 月 22 日
一、为什么结果集要统一封装
我们都知道,在开发前后端分离项目的时候,前后台交互的流程大概是前台页面访问后台接口,后台处理完前台的请求后将处理结果返回给前台,由前台去进行页面的渲染。那么,后台返回给前台的结果信息肯定是由后台提前设置好的结果信息,就拿下面这段封装结果集的信息来看,每次返回结果信息都需要 new 一个结果集对象,如果每次都new一个对象,会加大系统开销,损耗系统性能,为了一个返回结果而去这样加大系统开销实在是不值得推荐,那应该怎样呢?想必大家也都见过,那就是把返回结果集封装成一个工具类,每次就不需要频繁的new对象了,这样会一定程度上减少系统开销。
@GetMapping("login")public void loginResult() { Result result = new Result(); result.setCode(200); result.setMsg("登录成功"); result.setData("user",user);}
@GetMapping("logout")public void logoutResult() { Result result = new Result(); result.setCode(200); result.setMsg("注销成功"); result.setData(null);}
二、如何封装结果集
public class Result<T> { /** * 状态码 */ public int code; /** * 提示信息 */ private String msg; /** * 返回的数据 */ private T data; public Result<T> setCode(RetCode retCode) { this.code = retCode.code; return this; } public int getCode() { return code; } public Result<T> setCode(int code) { this.code = code; return this; } public String getMsg() { return msg; } public Result<T> setMsg(String msg) { this.msg = msg; return this; } public T getData() { return data; } public Result<T> setData(T data) { this.data = data; return this; }}
public enum RetCode { //请求成功 SUCCESS(200), //请求失败 FAIL(400), //未认证(签名错误) UNAUTHORIZED(401), //资源拒绝访问 FORBIDDEN(403), //接口不存在 NOT_FOUND(404), //服务器内部错误 INTERNAL_SERVER_ERROR(500); public int code; RetCode(int code) { this.code = code; }}
public class ResponseUtils { private final static String SUCCESS = "操作成功"; private final static String FAIL = "操作失败"; public static <T> Result<T> makeSuccessResponse() { return new Result<T>().setCode(RetCode.SUCCESS).setMsg(SUCCESS); } public static <T> Result<T> makeSuccessResponse(T data) { return new Result<T>().setCode(RetCode.SUCCESS).setMsg(SUCCESS).setData(data); } public static <T> Result<T> makeSuccessResponse(String msg, T data) { return new Result<T>().setCode(RetCode.SUCCESS).setMsg(msg).setData(data); } public static <T> Result<T> makeErrorResponse() { return new Result<T>().setCode(RetCode.FAIL).setMsg(FAIL); } public static <T> Result<T> makeErrorResponse(String msg) { return new Result<T>().setCode(RetCode.FAIL).setMsg(msg); } public static <T> Result<T> makeErrorResponse(int code, String msg) { return new Result<T>().setCode(code).setMsg(msg); } public static <T> Result<T> makeResponse(int code, String msg) { return new Result<T>().setCode(code).setMsg(msg); } public static <T> Result<T> makeResponse(int code, String msg, T data) { return new Result<T>().setCode(code).setMsg(msg).setData(data); }}
三、封装后的结果集长啥样
{ "code": 200, "data": { "id": 1, "username": "admin", "password": "2f6495613c5217c6c5f46439fc57cff2", "realname": "管理员" }, "msg": "登录成功"}
划线
评论
复制
发布于: 2020 年 07 月 22 日阅读数: 71
版权声明: 本文为 InfoQ 作者【Peision】的原创文章。
原文链接:【http://xie.infoq.cn/article/bd21a1f65c7804b03db5869e9】。文章转载请联系作者。
Peision
关注
除非我不想赢,否则没人能让我输! 2020.07.03 加入
还未添加个人简介
评论