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

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

前言

全局异常捕获是非常重要的一个用法,在大多项目中都会用到,下文中有详悉代码说明,文末附涨薪秘籍

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

推荐理由

  • 代码复制到项目中通过简单的配置即可实现
  • 可以灵活的根据自己的业务异常进行更细粒度的扩展

实践

1.封装统一返回结果类

  • 源代码
public class AjaxResult {
  //是否成功
    private Boolean success;
    //状态码
    private Integer code;
    //提示信息
    private String msg;
    //数据
    private Object data;
    public AjaxResult() {

    }
    //自定义返回结果的构造方法
    public AjaxResult(Boolean success,Integer code, String msg,Object data) {
        this.success = success;
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    //自定义异常返回的结果
    public static AjaxResult defineError(BusinessException de){
      AjaxResult result = new AjaxResult();
        result.setSuccess(false);
        result.setCode(de.getErrorCode());
        result.setMsg(de.getErrorMsg());
        result.setData(null);
        return result;
    }
    //其他异常处理方法返回的结果
    public static AjaxResult otherError(ErrorEnum errorEnum){
      AjaxResult result = new AjaxResult();
        result.setMsg(errorEnum.getErrorMsg());
        result.setCode(errorEnum.getErrorCode());
        result.setSuccess(false);
        result.setData(null);
        return result;
    }
  public Boolean getSuccess() {
    return success;
  }
  public void setSuccess(Boolean success) {
    this.success = success;
  }
  public Integer getCode() {
    return code;
  }
  public void setCode(Integer code) {
    this.code = code;
  }
  public String getMsg() {
    return msg;
  }
  public void setMsg(String msg) {
    this.msg = msg;
  }
  public Object getData() {
    return data;
  }
  public void setData(Object data) {
    this.data = data;
  }
    
}
2.自定义异常封装类

  • 源代码
public class BusinessException extends RuntimeException {
  private static final long serialVersionUID = 1L;
  /**
   * 错误状态码
   */
  protected Integer errorCode;
  /**
   * 错误提示
   */
  protected String errorMsg;

  public BusinessException(){

      }

  public BusinessException(Integer errorCode, String errorMsg) {
          this.errorCode = errorCode;
          this.errorMsg = errorMsg;
      }

  public Integer getErrorCode() {
    return errorCode;
  }

  public void setErrorCode(Integer errorCode) {
    this.errorCode = errorCode;
  }

  public String getErrorMsg() {
    return errorMsg;
  }

  public void setErrorMsg(String errorMsg) {
    this.errorMsg = errorMsg;
  }
}
3.错误信息枚举类,拒绝硬编码

  • 源代码
public enum ErrorEnum {
  // 数据操作错误定义
  SUCCESS(200, "成功"),
  NO_PERMISSION(403,"你没得权限"),
  NO_AUTH(401,"未登录"),
  NOT_FOUND(404, "未找到该资源!"),
  INTERNAL_SERVER_ERROR(500, "服务器异常请联系管理员"),
  ;

  /** 错误码 */
  private Integer errorCode;

  /** 错误信息 */
  private String errorMsg;

  ErrorEnum(Integer errorCode, String errorMsg) {
    this.errorCode = errorCode;
    this.errorMsg = errorMsg;
  }

    public Integer getErrorCode() {
        return errorCode;
    }

    public String getErrorMsg() {
        return errorMsg;
    }
}
4.全局异常处理

  • 源代码
/**
 * 全局异常处理器
 * 
 */
@RestControllerAdvice
public class GlobalExceptionHandler
{
    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);



    /**
     * 处理自定义异常
     *
     */
    @ExceptionHandler(value = BusinessException.class)
    public AjaxResult bizExceptionHandler(BusinessException e) {
      log.error(e.getMessage(), e);
        return AjaxResult.defineError(e);
    }

    /**
              *            处理其他异常
     *
     */
    @ExceptionHandler(value = Exception.class)
    public AjaxResult exceptionHandler( Exception e) {
       log.error(e.getMessage(), e);
        return AjaxResult.otherError(ErrorEnum.INTERNAL_SERVER_ERROR);
       
    }

}
5.测试

  • 返回结果

JavaPub参考巨人:https://www.toutiao.com/i6878184496945070604

目录
相关文章
|
8月前
|
前端开发 Java 关系型数据库
Java医院绩效考核系统源码B/S架构+springboot三级公立医院绩效考核系统源码 医院综合绩效核算系统源码
作为医院用综合绩效核算系统,系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修正,系统功能强大,完全模拟医院实际绩效核算过程,且每步核算都可以进行调整和参数设置,能适应医院多种绩效核算方式。
99 2
|
8月前
|
Java 关系型数据库 MySQL
java+B/S架构医院绩效考核管理系统源码 医院绩效管理系统4大特点
医院绩效考核管理系统,采用多维度综合绩效考核的形式,针对院内实际情况分别对工作量、KPI指标、科研、教学、管理等进行全面考核。医院可结合实际需求,对考核方案中各维度进行灵活配置,对各维度的权重、衡量标准、数据统计方式进行自定义维护。
76 0
|
存储 缓存 网络协议
从零开始搭建一个通用的业务技术架构,这套架构有点牛逼!
从零开始搭建一个通用的业务技术架构,这套架构有点牛逼!
|
消息中间件 JavaScript 小程序
公司这套架构统一处理 try...catch 这么香,求求你不要再满屏写了,再发现扣绩效!
公司这套架构统一处理 try...catch 这么香,求求你不要再满屏写了,再发现扣绩效!
|
消息中间件 架构师 NoSQL
Java面试很难?啃完阿里老哥这套Java架构速成笔记,我都能拿30K
最近有不少小伙伴在后台留言,说 Java 的面试越来越难了,尤其是技术面,考察得越来越细,越来越底层。
Java面试很难?啃完阿里老哥这套Java架构速成笔记,我都能拿30K
|
前端开发 Java Spring
公司这套架构统一处理 try...catch 这么香,求求你不要再满屏写了,再发现扣绩效!
软件开发springboot项目过程中,不可避免的需要处理各种异常,spring mvc 架构中各层会出现大量的try {...} catch {...} finally {...} 代码块,不仅有大量的冗余代码,而且还影响代码的可读性。这样就需要定义个全局统一异常处理器,以便业务层再也不必处理异常。
公司这套架构统一处理 try...catch 这么香,求求你不要再满屏写了,再发现扣绩效!
|
消息中间件 设计模式 前端开发
公司这套架构统一处理try...catch这么香,求求你不要再满屏写了,再发现扣绩效!
软件开发springboot项目过程中,不可避免的需要处理各种异常,spring mvc 架构中各层会出现大量的try {...} catch {...} finally {...} 代码块,不仅有大量的冗余代码,而且还影响代码的可读性。这样就需要定义个全局统一异常处理器,以便业务层再也不必处理异常。
公司这套架构统一处理try...catch这么香,求求你不要再满屏写了,再发现扣绩效!
|
微服务 程序员
搞技术十年,还是这套架构体系靠谱!
今天,就为大家整理一份目前互联网公司最主流的技术选型
1676 0
|
1月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
2月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
63 3

热门文章

最新文章