【全局异常处理记录】⭐️通过自定义全局处理器有效统一各种异常并记录

目录

前言

方案

示例

测试

总结

前言

        朋友们大家好啊,随着项目的进行,接口也是越来越多了,每个接口无论调用成功与否,都要有相应的应对措施,总不能出错的时候返回一堆异常信息给调用者,所以每个接口都应有完善的处理机制,但是随着接口的逐渐增多,异常的种类也在逐渐增多,这时候再去管理异常的时候,就比较繁琐了,所以迫切的需要一个全局处理器,统一管理一些常见的异常

方案

        因为用的是springBoot框架,正好借用提供的注解@ControllerAdvice和@ExceptionHandler实现自定义异常处理

@ControllerAdvice注解

        可以用于定义全局异常处理器,支持在一个类中几种处理所有的Controller层抛出的异常

@ExceptionHandler注解

        可以用于标记一个方法,标识该方法用于处理特定异常

示例

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;


@ControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGlobalException(Exception e){
        logger.error("Global Exception Handler:"+e.getMessage());
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Please try later.");
    }

}

测试

        手动在接口上抛出一个普通异常,然后调用接口查询,可以看到断点处停了,并且携带了我们抛出的异常信息,并且接口的返回结果也是处理器中定义好的

 

总结

        这种处理机制是配合了Spring框架的AOP原理,@ControllerAdvice注解的底层原理大致是这样的,使用该注解标记的类在Spring启动的时候被扫描并注册为异常处理器,可以捕获程序中抛出的异常,Spring通过AOP代理机制,也就是说在方法执行前和执行后去执行相应的逻辑

@ExceptionHandler注解也是,抛出异常后,Spring会寻找相匹配的@ExceptionHandler方法(也就是我们在异常类中标注的方法),并且调用该方法来处理异常。

        文章到这里就结束了


  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

先锋 Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值