阅读 145

接口统一返回(拿去即用)

写在前面

每个接口,每个公司,每个项目工程都应该有自己统一风格的返回,这是和前端的约定,这是每一套代码的“脸面”。至关重要。

下面大家看看我们平时怎么用的骚操作。

统一返回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


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐