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

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.kler.cn/a/595622.html

相关文章:

  • 调用feapder作为子程序时setting.py文件不起作用
  • 基于Python的智联招聘数据可视化分析推荐系统
  • HTML应用指南:利用GET请求获取猫眼电影日票房信息——以哪吒2为例
  • 在 Linux下使用 Python 3.11 和 FastAPI 搭建带免费证书的 HTTPS 服务器
  • GROOT N1,英伟达开源的人形机器人模型
  • 一些硬件知识【2025/3/1】
  • 【负载均衡系列】nginx负载高怎么排查
  • pbootcms版AI自动发文插件,自动发布自动配图,支持多任务
  • 存储过程在高并发环境下的重要性
  • 快速入手-基于Django的主子表间操作mysql(五)
  • dockerSDK-Go语言实现
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例7,TableView15_07带边框和斑马纹的导出表格示例
  • 【数据库备份】docker中数据库备份脚本——MySql备份脚本
  • C++ 异常 【无敌详细版】
  • 汇川EASY系列之以太网通讯(MODBUS_TCP做主站)
  • 爱普生晶振FC2012AA汽车ADAS主控制系统的理想选择
  • 对接马来西亚、印度、韩国、越南等全球金融数据示例
  • visual studion 2022如何使用PlaySound()
  • 扩展卡尔曼滤波
  • Java 大视界 -- Java 大数据在智能医疗远程会诊与专家协作中的技术支持(146)