公司这套架构统一处理 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

目录
相关文章
|
4月前
|
前端开发 Java 关系型数据库
Java医院绩效考核系统源码B/S架构+springboot三级公立医院绩效考核系统源码 医院综合绩效核算系统源码
作为医院用综合绩效核算系统,系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修正,系统功能强大,完全模拟医院实际绩效核算过程,且每步核算都可以进行调整和参数设置,能适应医院多种绩效核算方式。
69 2
|
4月前
|
Java 关系型数据库 MySQL
java+B/S架构医院绩效考核管理系统源码 医院绩效管理系统4大特点
医院绩效考核管理系统,采用多维度综合绩效考核的形式,针对院内实际情况分别对工作量、KPI指标、科研、教学、管理等进行全面考核。医院可结合实际需求,对考核方案中各维度进行灵活配置,对各维度的权重、衡量标准、数据统计方式进行自定义维护。
54 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这么香,求求你不要再满屏写了,再发现扣绩效!
|
微服务 程序员
搞技术十年,还是这套架构体系靠谱!
今天,就为大家整理一份目前互联网公司最主流的技术选型
1662 0
|
20天前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。
|
5天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
13 3

热门文章

最新文章