接口统一返回(拿去即用)
写在前面
每个接口,每个公司,每个项目工程都应该有自己统一风格的返回,这是和前端的约定,这是每一套代码的“脸面”。至关重要。
下面大家看看我们平时怎么用的骚操作。
统一返回ResultBO
话不多说,直接上代码
/** * http 响应数据结构 * @author yn * @date 2021/10/23. */ public class ResultBO<T> implements Serializable { //失败 public static final int ERROR = 0; //成功 public static final int SUCCESS = 1; //返回结果标示 private Integer completeCode; //业务标示 private String reasonCode; //业务 错误日志或者成功代码 private String reasonMessage; //业务参数返回(任何类型) private T data; /** * 外部不要直接new对象 * 用builder模式 */ private ResultBO(Builder<T> builder) { this.reasonCode = builder.reasonCode; this.reasonMessage = builder.reasonMessage; this.completeCode = builder.completeCode; this.data = builder.data; } @Deprecated public ResultBO(){ } public Integer getCompleteCode() { return completeCode; } public String getReasonCode() { return reasonCode; } public String getReasonMessage() { return reasonMessage; } public T getData() { return data; } @Deprecated public ResultBO<T> setCompleteCode(Integer completeCode) { this.completeCode = completeCode; return this; } @Deprecated public ResultBO<T> setReasonCode(String reasonCode) { this.reasonCode = reasonCode; return this; } @Deprecated public ResultBO<T> setReasonMessage(String reasonMessage) { this.reasonMessage = reasonMessage; return this; } @Deprecated public ResultBO<T> setData(T data) { this.data = data; return this; } public boolean isResponseOk(){ return this.getCompleteCode() != null && this.getCompleteCode() == SUCCESS; } @Override public String toString() { return "ResultBO{" + "completeCode=" + completeCode + ", reasonCode='" + reasonCode + ''' + ", reasonMessage='" + reasonMessage + ''' + ", data=" + (data == null ? "null" : data.toString()) + '}'; } public static ResultBO responseFail(String s) { return ResultBO.Builder.init().setFailMessage(s).build(); } public static ResultBO ResultBOEnum(ResultBOEnum rresultBOEnum) { return ResultBO.Builder.init().setResultBOEnum(resultBOEnum).build(); } public static ResultBO responseOK() { return ResultBO .Builder .init() .setResultBOEnum(ResultBOEnum.SUCCESS) .build(); } public static class Builder<K>{ private Integer completeCode; private String reasonCode; private String reasonMessage; private K data; private Builder(ResultBOEnum resultBOEnum){ if (resultBOEnum == ResultBOEnum.SUCCESS){ this.completeCode = SUCCESS; } else { this.completeCode = ERROR; } this.reasonCode = resultBOEnum.getCode(); this.reasonMessage = resultBOEnum.getMessage(); } static public <K> Builder<K> init() { return new Builder<>(ResultBOEnum.SUCCESS); } public Builder<K> setCompleteCode(int code) { this.completeCode = code; return this; } public Builder<K> setReasonCode(String code) { this.reasonCode = code; return this; } public Builder<K> setReasonMessage(String msg) { this.reasonMessage = msg; return this; } public Builder<K> setFailMessage(String msg) { this.reasonMessage = msg; this.completeCode = ERROR; return this; } public Builder<K> setResultBOEnum(ResultBOEnum resultBOEnum) { if (resultBOEnum == ResultBOEnum.SUCCESS){ this.completeCode = SUCCESS; } else { this.completeCode = ERROR; } this.reasonMessage = resultBOEnum.getMessage(); this.reasonCode = resultBOEnum.getCode(); return this; } public Builder<K> setData(K k) { this.data = k; return this; } public ResultBO<K> build() { return new ResultBO<>(this); } } } 复制代码
代码很简单 拿去即用,也可以进行二次开发。统一返回code我们采用了阿里规约规定的返回code。下面看下
/** * ResultBO 返回码 * @author yn */ public enum ResultBOEnum { /** * 码表注释 * A业务错误,B系统错误,C第三方调用错误 * 数字前两位为业务,后三位为错误码,1开始到999,0为保留位 * 业务码表 * 01:用户 * 04:优惠券 * ..... */ SUCCESS("000000", "成功"), /** * 用户码表 */ ERROR_A01001("A01001", "用户不存在"), /** * 优惠券码表 */ ERROR_A04001("A04001", "活动已结束"), ERROR_A04002("A04002", "优惠券不可用"), ERROR_A04003("A04003","很抱歉,优惠券领光了!下次早点来哟~"), ........ /** * 系统异常码表 */ ERROR_B00001("B00001","系统执行异常"), ERROR_B00002("B00002","系统执行超时"); private String code; private String message; ResponseBOEnum(String code, String message) { this.code = code; this.message = message; } public String getCode() { return this.code; } public String getMessage() { return this.message; } } 复制代码
两者结合使用,让你代码显得更专业,接口更健壮,我们看下如何使用。
/** * 测试统一返回 * @return */ @RequestMapping(value = "testApi") public ResultBO testApi(@RequestParam("userId") Integer userId){ User user = userService.findById(userId); if(null == user){ return ResultBO.responseFail("用户不存在") } //业务处理成功 return ResultBO.responseOK(); } 复制代码
总结
统一返回是根据自己公司业务自定义,没有完全适合,只能说大体适用即可
作者:苏世_
链接:https://juejin.cn/post/7022291852325814308