当前位置: 首页 > article >正文

013-SpringBoot 定义优雅的全局异常处理方式

SpringBoot 定义优雅的全局异常处理方式

  • 一、概述
  • 二、定义全局异常接口
  • 三、定义全局异常枚举
  • 四、定义全局基础异常
  • 五、定义全局基础业务异常
  • 六、定义全局返回
  • 七、定义全局返回工厂
  • 八、全局异常处理
  • 九、实体类
  • 十、Controller
  • 十一、效果展示

一、概述

在日常项目开发中,异常是常见的,但是如何更高效的处理好异常信息,让我们能快速定位到BUG,是很重要的,不仅能够提高我们的开发效率,还能让你代码看上去更舒服。

SpringBoot中,@RestControllerAdvice 即可开启全局异常处理,使用该注解表示开启了全局异常的捕获,我们只需在自定义一个方法使用 @ExceptionHandler 注解然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理。

二、定义全局异常接口

public interface IExceptionCodeMsg {
   

    /**
     * 错误码
     * @return
     */
    String getCode();

    /**
     * 错误信息
     * @return
     */
    String getMsg();

}

三、定义全局异常枚举

public enum PublicExceptionCodeEnum implements IExceptionCodeMsg {
   

    // 数据操作错误定义
    SUCCESS("0000", "请求成功"),
    PARAM_ERROR("9001", "传入参数不正确!"),
    REQUEST_FALL("9002", "请求失败,请稍后重试!"),
    SYSTEM_EXCEPTION("9999", "系统请求失败"),
    NO_AUTHORITY("0004", "无权限访问"),
    PARAM_SQL_INJECTION_TIP("0013", "参数存在SQL注入风险"),
    BODY_NOT_MATCH("0014", "请求数据格式不符"),
    PARAMS_NOT_CONVERT("0015", "类型转换不对"),
    ;

    /**
     * 错误码
     */
    private final String code;

    /**
     * 错误描述
     */
    private final String msg;

    PublicExceptionCodeEnum(String code, String msg) {
   
        this.code = code;
        this.msg = msg;
    }

    @Override
    public String getCode() {
   
        return code;
    }

    @Override
    public String getMsg() {
   
        return msg;
    }

}

四、定义全局基础异常

@Data
public class BaseException  extends RuntimeException {
   

    private static final long serialVersionUID = -4046448505794038869L;

    /**
     * 异常代码
     */
    private String code;

    /**
     * 异常信息
     */
    private String msg;

    /**
     * 参数
     */
    private Object data;

    /**
     * 异常信息对象
     */
    private Throwable cause;


    protected BaseException(IExceptionCodeMsg iExceptionCodeMsg, String msg, Object data, Throwable cause) {
   
        super(iExceptionCodeMsg.getCode(), cause);
        this.setCode(iExceptionCodeMsg.getCode());
        if (StrUtil.isBlank(msg)) {
   
            this.setMsg(iExceptionCodeMsg.getMsg());
        } else {
   
            this.setMsg(msg);
        }
        if (cause != null) {
   
            this.setCause(cause);
        }
        if (data != null) {
   
            this.setData(data);
        }
    }

}

五、定义全局基础业务异常

public class BusinessBaseException extends BaseException {
   

    private static final long serialVersionUID = -866

http://www.kler.cn/a/429972.html

相关文章:

  • 网络安全基础以及概念
  • Flink三种集群部署模型
  • 安卓投屏电脑最详细教程
  • RabbitMQ基本介绍及简单上手
  • C++ 多线程异步操作
  • with as提高sql的执行效率
  • ubuntu20.04安装anygrasp_sdk
  • 个人IP建设:简易指南
  • sql常见50道查询练习题
  • 【DataWorks最佳实践】权限及安全-风险识别规则响应案例
  • 手机端常见 BUG 深度剖析:成因、表现与解决之道
  • Android 屏蔽安全模式+去掉系统安全模式(SAFE MODE)
  • Orleans使用KafkaStream
  • SQL,根据数据的时间跨度进行不同粒度的统计
  • JavaScript 单例模式的创建与应用
  • 调度系统:DonpinScheduler 执行 Couchbase SQL 脚本的实际例子
  • 公共服务 kkFileView 4.1 文件预览 Docker 一键部署
  • 实现 DataGridView 下拉列表功能(C# WinForms)
  • 【C#】Task.Delay与Thread.Sleep
  • WPF 本地生成验证码
  • mysql 架构详解
  • 【元素操作】鼠标 -ActionChains
  • SWIRL:有望成为2025年顶级AI搜索引擎
  • 《蓝桥杯比赛规划》
  • 第七节(2)、T型加减速优化处理【51单片机-TB6600驱动器-步进电机教程】
  • NVR管理平台EasyNVR:EasyNTS上云网关无法启动且报错404如何解决?