Springboot全局异常处理实现

本文介绍了SpringBoot全局异常处理的实现,通过ControllerAdvice注解捕获并统一处理异常,包括404错误、参数类型错误和业务逻辑异常。详细步骤包括添加依赖、创建响应枚举、自定义异常类、定义全局异常处理类、创建实体类和测试接口,旨在降低代码耦合度,提升系统维护性。
摘要由CSDN通过智能技术生成

一、前言

    在开发过程中,我们经常会遇到异常,不管是DAO、SERVICE、Controller那一层都有可能发生,对于异常处理,正常同时是try-catch或者直接throw出去不管了,这就导致了代码中四处散落着try-catch的代码,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。

那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?------答案是肯定的。全局异常处理机制

二、SpringBoot全局异常处理方式

正常的Web应用开发时,需要考虑到应用运行发生异常时或出现错误时如何来被处理,例如捕获必要的异常信息,记录日志方便日后排错,友好的用户响应输出等等.而应用程序发生错误,有可能是应用自身的问题,也有可能是客户端操作的问题.在我们的项目中全局异常处理非常重要。

大概有三种异常情况:
1.在进入Controller之前,譬如请求一个不存在的地址404错误;

2.在执行@RequestMapping时,进入逻辑处理阶段前,譬如传的参数类型错误;

3.以上都正常时,在controller里执行逻辑代码时出的异常,比如出现NullPointerException。

三、实现步骤

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

1.添加依赖

 <!--web依赖-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

2.创建响应枚举类

提前创建好一个枚举类,这里面定义两个属性,分别是 code 和 msg ,然后再定义多个成功与异常标识的常量,这样来简化开发中多个地方都要输入重复的异常信息的问题。

package com.example.exceptionhandledemo.custom;

/**
 * 自定义全局异常枚举
 * @author qzz
 */

public enum GlobalErrorCodeEnum {
   

    /**
     * 未知异常
     */
    SUCCESS("200","成功!"),

    ERROR("400","失败!"),

    BODY_NOT_MATCH("401","请求的数据格式不符!"),

    SIGN_NOT_MACTH("403","请求的数字签名不匹配!"),

    NOT_FOUND("404","未找到该资源!"),

    SERVER_ERROR("500","服务器内部错误!"),

    SERVER_BUSY("503","服务器正忙,请稍后再试!")
    ;

    private String code;
    private String msg;

    public String getCode() {
   
        return code;
    }

    public void setCode(String code) {
   
        this.code = code;
    }

    public String getMsg() {
   
        return msg;
    }

    public void setMsg(String msg) {
   
        this.msg = msg;
    }

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

}

3.自定义异常类

创建一个自定义异常类,继承RuntimeException:

package com.example.exceptionhandledemo.custom;

import lombok
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值