后端数据都是以json的形式给前端返回,一般都是通过@ResponseBody来进行返回.每次返回都要重新格式化一下json的格式.如果接受请求的方法多了,那么这种返回方式无疑是效率很低的.那么就需要一个类来吧这些返回的格式统一管理起来.
可以定义一个Result类,用来专门管理返回数据的:
@Data public class Result<T> { private int code; //返回状态码 private String msg; //返回的message private T data; //返回的数据 private Result(T data) { this.code = 0; this.msg = "success"; this.data = data; } private Result(CodeMsg msg) { if (msg == null) { return; } this.code = msg.getCode(); this.msg = msg.getMsg(); } /** * 失败的时候调用 */
public static <T> Result<T> error(CodeMsg msg) { return new Result<T>(msg); } /** *成功的时候调用 */
public static <T> Result<T> success(T data) { return new Result<T>(data); } }
其中CodeMsg封装了具体的错误信息:
@Data public class CodeMsg { private int code; private String msg; private CodeMsg(int code, String msg) { this.code = code; this.msg = msg; } public CodeMsg fillArgs(Object... args) { //带自定义格式化参数的错误信息 int code = this.code; String message = String.format(this.msg, args); return new CodeMsg(code,message); } /** * 通用异常 */
public static CodeMsg SUCCESS = new CodeMsg(0, "SUCESS"); public static CodeMsg SERVER_ERROR = new CodeMsg(500100, "服务端异常"); public static CodeMsg BIND_ERROR = new CodeMsg(500101, "参数校验异常:%s"); /** * 登录模块5002XX */
public static final CodeMsg PASSWORD_EMPTY = new CodeMsg(500211, "密码不能为空"); public static final CodeMsg MOBILE_EMPTY = new CodeMsg(500211, "手机号不能为空"); public static final CodeMsg MOBILE_ERROR = new CodeMsg(500211, "手机号格式错误"); public static final CodeMsg USER_NOT_EXITS = new CodeMsg(500211, "用户不存在"); public static final CodeMsg PASSWORD_ERROR = new CodeMsg(500211, "密码错误"); }
这样在后端返回的时候,只需要给定CodeMsg里面的静态常量就可以了.根据自己需要进行定义.
return Result.success(true);
return Result.error(CodeMsg.SERVER_ERROR)