当前位置: 首页 > 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;
    }
}

http://www.dtcms.com/a/80682.html

相关文章:

  • 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 安装教程
  • 【实战案例】用STAR+3W模型拆解电商支付系统设计文档
  • 移动端医疗AI诊断系统的设计思路与技术展望——多模态生理数据分析的理论框架探讨
  • 中小企业如何低成本构建高效专属网络?
  • 快速入手-基于Django的mysql配置(三)
  • 分布式中间件:RabbitMQ死信队列和延迟队列
  • 实验12深度学习
  • [samba配置]宿主机访问虚拟机目录
  • 网络华为HCIA+HCIP 广域网技术
  • Linux常用命令与权限理解总结
  • “三带一”算法题