首页 > 其他分享 >全局异常处理

全局异常处理

时间:2024-02-16 15:22:21浏览次数:20  
标签:处理 拦截 切面 Aspect 日志 异常 全局

对于异常处理由全局异常处理的拦截类实现

全局异常拦截类实现:

拦截类上被RestControllerAdvice注解标注代表当前类是一个ControllerAdvice,同时类中的方法上有ExceptionHandler注解,注解的value值代表当前方法所处理的异常类型,当前拦截类中的方法个数和这些方法上注解的value值取决于系统异常的类型,一般有MethodArgumentNotValidExecption(参数校验异常)、RuntimeException(运行时异常)、Exception(托底异常)等,当业务逻辑中抛出相应异常时,会经过当前异常拦截类,由相应的方法处理,如果抛出了没被定义的异常,则被托底的Exception拦截。

拦截方法处理:

1、规范返回参数:如果没经过异常拦截类处理,前端收到的返回参数可能是一大段不符合接口定义的报错信息,拦截方法首先要做的就是规范报错信息,code和message之类的信息。

2、打印日志:对于业务发生异常被抛出controller层的时候,之前我们说的那个切面Aspect就不会走下去了,也就是在执行proceed这一行后,后面的代买不会执行,自然也不会打印日志,那么就需要在相应的异常拦截里打印日,这个时候需要去获取请求的参数,就是通过request去获取,这也是为什么在全局日志切面中需要把输入参数塞入request中。

Aspect和ControllerAdvice:

ControllerAdvice其实也就是一个特殊类,它作为Spring框架的一部分,自然也是可以被Aspect给切面的,比如在全局的异常处理类中,我们可以写一个Aspect,增强类型为AfterReturn(后置通知)型,切入点设置为“target(异常拦截类类名)”,这样我们就可以对异常拦截类做一个切面来扩展相关功能,比如上述中的日志打印,每种异常的拦截方法中都需要打印日志,那么可以在这个切面中统一处理打印日志。

注意:这里的Aspect切入点为ControllerAdvice类,并没有破坏Spring的controller -> aspect -> controllerAdvice约定,因为Spring约定里的aspect是切入点为controller的切面,而本文的aspect切入点为controllerAdvice。

标签:处理,拦截,切面,Aspect,日志,异常,全局
From: https://www.cnblogs.com/zeevy/p/18017187

相关文章

  • 异常
    1异常概念java程序中,我们处理的是Exception.2异常体系图(异常的类图)2.1编译异常编译异常在写代码是就要解决,不然会报错不能运行。2.2运行异常2.3自定义异常3异常处理3.1什么是异常处理3.2异常处理的方式示意图3.3try-catch-finally......
  • [学习笔记]换根 DP 的常用处理方式
    [学习笔记]换根DP的常用处理方式换根DP,又称作二次扫描法,通常用于“对每个根求出树形DP的答案”。以每个点作为根节点进行一次树形DP的代价通常无法承受,因此我们会使用两次DFS:第一次DFS指定一个点为根节点,运行一次常规的树形DP。第二遍DFS进行换根DP,得到将根转移......
  • 多个request接口的功能优化处理速度
    一、原始代码功能如下,包含两个request接口的调用,耗时情况约4秒importdatetimeimporttimeimportrequestsstart_time=datetime.datetime.now()print("开始时间:",start_time)url="http://192.168.37.8:7777/api/mytest2"data1=requests.post(url).textprint(da......
  • Python:处理大数据量文件心得
    --javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown完成大文件按规则拆解。使用python实现将5个多g,总共五千万行数据的csv文件进行按照某个特殊时属性进行拆解。问题难点:文件过大,服务器内存资源不足,需要分块读入内存并处理。之前想着......
  • 使用lanczos算法进行的预处理共轭梯度算法(Preconditioned Conjugate Gradients Metho
    构造预处理矩阵M(对称正定)下图来自:预处理共轭梯度法(1)......
  • 关于extern和模块化编程全局变量、函数、对象不同源文件之间的使用说明
    extern的使用在C语言中,extern关键字用于在多个源文件之间声明全局变量、函数或对象,实现模块间的交互和数据共享。即告诉编译器该变量或函数是在其他源文件中定义的,并且可以在当前源文件中使用。而局部函数的作用域限定在其定义所在的作用域内,无法被其他源文件直接访问或调用。因......
  • 预处理共轭梯度算法(Preconditioned Conjugate Gradients Method)
    预处理共轭梯度算法(PreconditionedConjugateGradientsMethod)给出百度百科上的解释:预处理共轭梯度法预处理共轭梯度法是。不必预先估计参数等特点。共轭梯度法近年来在求解大型稀疏方程组中取得了较好的成效。理论上普通的共扼梯度法对于对称超正定方程,只要迭代步数达到......
  • 使用MICE进行缺失值的填充处理
    在我们进行机器学习时,处理缺失数据是非常重要的,因为缺失数据可能会导致分析结果不准确,严重时甚至可能产生偏差。处理缺失数据是保证数据分析准确性和可靠性的重要步骤,有助于确保分析结果的可信度和可解释性。在本文中,我们讲重点介绍MICE。MICE(MultipleImputationbyChainedEq......
  • jvm shutdownHook + spring 自定义事件实现业务处理
    jvm的shutdownHook可以实现对于jvm退出的一些处理,比如资源清理,异常事件通知,spring自定义事件(或者使用内部的)可以实现bean的一些事件驱动处理,两个结合起来可以方便我们进行一些业务处理一些业务场景资源清理服务停止业务状态一致性补偿服务注册场景中的取消注册服务停......
  • 【机器学习】数据清洗之处理异常点
    ......