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

SpringMVC全局异常处理机制

异常处理机制

异常处理的两种方式:

编程式异常处理:是指在代码中显式地编写处理异常的逻辑。它通常涉及到对异常类型的检测及其处理,例如使用 try-catch 块来捕获异常,然后在 catch 块中编写特定的处理代码,或者在 finally 块中执行一些清理操作。

声明式异常处理:将异常处理的逻辑从具体的业务逻辑中分离出来,通过配置等方式进行统一的管理和处理。在声明式异常处理中,开发人员只需要为方法或类标注相应的注解(如 @Throws 或 @ExceptionHandler),就可以处理特定类型的异常。相较于编程式异常处理,声明式异常处理可以使代码更加简洁、易于维护和扩展。

声明式异常处理方式

1/声明全局异常处理器控制类

/**
 * projectName: com.atguigu.execptionhandler
 * 
 * description: 全局异常处理器,内部可以定义异常处理Handler!
 */

/**
 * @RestControllerAdvice = @ControllerAdvice + @ResponseBody
 * @ControllerAdvice 代表当前类是全局异常处理器 
 * @ResponseBody 代表不映射试图,直接返回字符串给客户端
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

  
}

2/在控制类中声明异常处理handler方法

异常处理handler方法和普通的handler方法参数接收和响应都一致!

只不过异常处理handler方法要映射异常,发生对应的异常会调用!

普通的handler方法要使用@RequestMapping注解映射路径,发生对应的路径调用!

异常处理handler 使用  @ExceptionHandler(HttpMessageNotReadableException.class)  注解指定发生HttpMessageNotReadableException异常时调用该方法!

package com.xin.config; /**
 * projectName: com.atguigu.execptionhandler
 * 
 * description: 全局异常处理器,内部可以定义异常处理Handler!
 */

import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @RestControllerAdvice = @ControllerAdvice + @ResponseBody
 * @ControllerAdvice 代表当前类是全局异常处理器 
 * @ResponseBody 代表不映射试图,直接返回字符串给客户端
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 异常处理handler
     *
     * @param e 获取异常对象!
     * @return 返回handler处理结果!
     * @ExceptionHandler(HttpMessageNotReadableException.class) 该注解标记异常处理Handler, 并且指定发生异常调用该方法!
     */
    @ExceptionHandler(HttpMessageNotReadableException.class)
    public Object handlerJsonDateException(HttpMessageNotReadableException e) {

        return null;
    }

    /**
     * 当发生空指针异常会触发此方法!
     *
     * @param e
     * @return
     */
    @ExceptionHandler(NullPointerException.class)
    public Object handlerNullException(NullPointerException e) {

        return null;
    }

    /**
     * 所有异常都会触发此方法!但是如果有具体的异常处理Handler!
     * 具体异常处理Handler优先级更高!
     * 例如: 发生NullPointerException异常!
     * 会触发handlerNullException方法,不会触发handlerException方法!
     *
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    public Object handlerException(Exception e) {

        return null;
    }
}

相关文章:

  • Android SDK下载安装配置
  • 多无人车协同探索开源包启动文件介绍(下)
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(10)
  • LVGL和其他图形库区别于联系
  • Spring Boot Actuator 自定义健康检查(附Demo)
  • AI安全、大模型安全研究(DeepSeek)
  • 3. 轴指令(omron 机器自动化控制器)——>MC_SetPosition
  • Python(数据结构概念,算法时间效率衡量,链表)
  • Oracle GoldenGate (OGG) 安装、使用及常见故障处理
  • 英伟达黄仁勋2025GTC演讲深度解析:液冷GPU、AI工厂、机器人AI…...
  • 【NoC仿真器(nirgam noxim)搭建】自用笔记
  • Debian 12系统中允许Root远程SSH登录解决方法!
  • python 数据可视化TVTK库安装与使用
  • RabbitMQ 集群搭建步驟
  • TG电报群管理机器人定制开发的重要性
  • C语言问题总结(二)
  • 数据分析的12个挑战及其解决方法
  • Event driven agentic document workflows 笔记 - 1
  • 开源软件许可证冲突的原因和解决方法
  • 【Linux】VMware Workstation Pro 17 安装教程
  • 第四轮伊美核谈判将于11日在阿曼举行
  • 壹基金发布2024年度报告,公益项目惠及937万人次
  • 招行:拟出资150亿元全资发起设立金融资产投资公司
  • 上海优化营商环境再攻坚,企业和机构有哪些切实感受?
  • 港理大研究揭示:塑胶废物潜藏微生物群落或引发生态危机
  • 明查|这是“C919迫降在农田”?实为飞机模型将用于科普体验