文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

公司这套架构统一处理try...catch这么香,求求你不要再满屏写了,再发现扣绩效!

2024-12-03 17:59

关注

软件开发springboot项目过程中,不可避免的需要处理各种异常,spring mvc 架构中各层会出现大量的try {...} catch {...} finally {...} 代码块,不仅有大量的冗余代码,而且还影响代码的可读性。这样就需要定义个全局统一异常处理器,以便业务层再也不必处理异常。

推荐理由

实践

1.封装统一返回结果类

 

  1. public class AjaxResult {  
  2.  //是否成功  
  3.     private Boolean success;  
  4.     //状态码  
  5.     private Integer code;  
  6.     //提示信息  
  7.     private String msg;  
  8.     //数据  
  9.     private Object data;  
  10.     public AjaxResult() {  
  11.     }  
  12.     //自定义返回结果的构造方法  
  13.     public AjaxResult(Boolean success,Integer code, String msg,Object data) {  
  14.         this.success = success;  
  15.         this.code = code;  
  16.         this.msg = msg;  
  17.         this.data = data;  
  18.     }  
  19.     //自定义异常返回的结果  
  20.     public static AjaxResult defineError(BusinessException de){  
  21.      AjaxResult result = new AjaxResult();  
  22.         result.setSuccess(false);  
  23.         result.setCode(de.getErrorCode());  
  24.         result.setMsg(de.getErrorMsg());  
  25.         result.setData(null);  
  26.         return result;  
  27.     }  
  28.     //其他异常处理方法返回的结果  
  29.     public static AjaxResult otherError(ErrorEnum errorEnum){  
  30.      AjaxResult result = new AjaxResult();  
  31.         result.setMsg(errorEnum.getErrorMsg());  
  32.         result.setCode(errorEnum.getErrorCode());  
  33.         result.setSuccess(false);  
  34.         result.setData(null);  
  35.         return result;  
  36.     }  
  37.  public Boolean getSuccess() {  
  38.   return success;  
  39.  }  
  40.  public void setSuccess(Boolean success) {  
  41.   this.success = success;  
  42.  }  
  43.  public Integer getCode() {  
  44.   return code;  
  45.  }  
  46.  public void setCode(Integer code) {  
  47.   this.code = code;  
  48.  }  
  49.  public String getMsg() {  
  50.   return msg;  
  51.  }  
  52.  public void setMsg(String msg) { 
  53.   this.msg = msg; 
  54.  }  
  55.  public Object getData() {  
  56.   return data;  
  57.  }  
  58.  public void setData(Object data) {  
  59.   this.data = data;  
  60.  }    

2 自定义异常封装类

 

  1. public class BusinessException extends RuntimeException {  
  2.  private static final long serialVersionUID = 1L 
  3.    
  4.  protected Integer errorCode;  
  5.    
  6.  protected S  
  7.  public BusinessException(){  
  8.      }  
  9.  public BusinessException(Integer errorCode, String errorMsg) {  
  10.          this.errorCode = errorCode;  
  11.          this.errorMsg = errorMsg;  
  12.      }  
  13.  public Integer getErrorCode() { 
  14.   return errorCode;  
  15.  }  
  16.  public void setErrorCode(Integer errorCode) {  
  17.   this.errorCode = errorCode;  
  18.  }  
  19.  public String getErrorMsg() {  
  20.   return errorMsg;  
  21.  }  
  22.  public void setErrorMsg(String errorMsg) {  
  23.   this.errorMsg = errorMsg;  
  24.  }  

3 错误枚举,拒绝硬编码

 

  1. public enum ErrorEnum {  
  2.  // 数据操作错误定义  
  3.  SUCCESS(200, "成功"),  
  4.  NO_PERMISSION(403,"你没得权限"), 
  5.  NO_AUTH(401,"未登录"),  
  6.  NOT_FOUND(404, "未找到该资源!"),  
  7.  INTERNAL_SERVER_ERROR(500, "服务器异常请联系管理员"),  
  8.  ;  
  9.    
  10.  private Integer errorCode;  
  11.    
  12.  private String errorMsg;  
  13.  ErrorEnum(Integer errorCode, String errorMsg) {  
  14.   this.errorCode = errorCode;  
  15.   this.errorMsg = errorMsg;  
  16.  }  
  17.     public Integer getErrorCode() {  
  18.         return errorCode;  
  19.     }  
  20.     public String getErrorMsg() {  
  21.         return errorMsg;  
  22.     }  

4 全局异常处理类

 

  1.   
  2. @RestControllerAdvice  
  3. public class GlobalExceptionHandler  
  4.  
  5.     private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);  
  6.      
  7.     @ExceptionHandler(value = BusinessException.class)  
  8.     public AjaxResult bizExceptionHandler(BusinessException e) {  
  9.      log.error(e.getMessage(), e);  
  10.         return AjaxResult.defineError(e);  
  11.     }  
  12.      
  13.     @ExceptionHandler(value = Exception.class) 
  14.     public AjaxResult exceptionHandler( Exception e) {  
  15.       log.error(e.getMessage(), e);  
  16.         return AjaxResult.otherError(ErrorEnum.INTERNAL_SERVER_ERROR);    
  17.      } 

5 测试

返回结果:

 

 

来源:java版web项目内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯