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

相关文章:

SpringMVC全局异常处理机制

异常处理机制 异常处理的两种方式: 编程式异常处理:是指在代码中显式地编写处理异常的逻辑。它通常涉及到对异常类型的检测及其处理,例如使用 try-catch 块来捕获异常,然后在 catch 块中编写特定的处理代码,或者在 f…...

基于32单片机的无人机直流电机闭环调速系统设计

标题:基于32单片机的无人机直流电机闭环调速系统设计 内容:1.摘要 本文针对无人机直流电机调速需求,设计了基于32单片机的无人机直流电机闭环调速系统。背景在于无人机应用场景不断拓展,对电机调速精度和稳定性要求日益提高。目的是开发一套高精度、响应…...

如何实现园区零碳管理?安科瑞EMS3.0推动园区低碳转型

当工业园区电费年耗超千万、碳排数据成监管红线,传统“拉闸限电”式管理已无法应对双碳倒计时——如何让光伏、储能、充电桩“听懂指令”,让每一度电创造3倍价值?187*210*98*782 一、零碳园区管理的三大痛点 1. 能源错配严重:风…...

Python Django入门(创建其他网页)

在本章中,你将学习如何使用 Django(http://djangoproject.com/ )来开发一个名为“学习笔记”(Learning Log)的项目,这是一个在线日志系统,让你能够记录所学习的有关特定主题的知识。 我们将为这…...

Error: The resource name must start with a letter

Error: The resource name must start with a letter 这个错误通常是由于资源名称(如布局文件、字符串资源、ID 等)不符合命名规则导致的。Android 资源名称必须遵循以下规则: 必须以字母开头(不能以数字或下划线开头&#xff09…...

2025年- G23-Lc97-104.二叉树的最大深度-java版(递归调用左右子树)

1.题目描述 2.思路 要用到max函数,返回的时候返回左右子树的最大值。其次要递归调用左右子树,寻找最大深度。 在每个递归返回时,我们 必须把当前节点的深度算进去,否则我们只计算了子树的深度,而没有包括当前节点。 …...

Powershell WSL Windows系统复制数据到ubuntu子系统系统

从本地D盘下拷贝数据到ubuntu子系统下 Powershell 管理员打开执行 /mnt/d 此处是本地Windows系统的路径表示/opt ubutu 子系统目录 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/从ubuntu子系统中拷贝数据到本地D盘下 Powershell 管理员打开执行…...

零基础上手Python数据分析 (7):Python 面向对象编程初步

写在前面 回顾一下,我们已经学习了 Python 的基本语法、数据类型、常用数据结构和文件操作、异常处理等。 到目前为止,我们主要采用的是 面向过程 (Procedural Programming) 的编程方式,即按照步骤一步一步地编写代码,解决问题。 这种方式对于简单的任务已经足够,但当程序…...

到底爱不爱我

L2-3 到底爱不爱我 古代少女有了心上人时,会悄悄折一条树枝,揪那枝上的叶子,揪一片叶子念一句“爱我”,再揪一片念一句“不爱我”…… 这样揪落最后一片叶子的时候,看看是停在“爱”还是“不爱”。 但聪明的慧娘一眼洞…...

Python 3.13.2安装教程(安装包)Python 3.13.2 快速安装指南

文章目录 前言一 、Python 3.13.2下载二、Python 3.13.2安装教程1.运行安装程序2.选择安装方式3.自定义安装选项4.开始安装5.安装完成6.打开程序7.验证安装 前言 Python 作为一门通用编程语言,在全球拥有庞大的用户群体。其简洁易读的语法和丰富的库,使…...

CentOS 7 64位安装Docker

以下是在已有的 CentOS 7 64 位虚拟机上安装 Docker 并配置华为镜像源的详细步骤: 1. 备份原有 Yum 源(可选,建议操作) # 备份原有仓库文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backu…...

Linux驱动学习笔记(六)

平台总线 1.平台总线模型也叫platform总线模型,平台总线是Linux系统虚拟出来的总线, 引入总线的概念可以对驱动代码和设备信息进行分离。平台总线模型将一个驱动分成了两个部分:platform_device和platform_driver,例如可使用文件device.c和d…...

35、deque 容器的扩容机制

1. deque 的底层数据结构 deque(双端队列)的底层实现通常由分块连续内存和中央控制结构组成。具体结构如下: 分块存储:元素被存储在多个固定大小的内存块(称为缓冲区)中,每个缓冲区可容纳多个…...

透析Vue的nextTick原理

nextTick 是 Vue.js 中的一个核心机制,用于在 下一次 DOM 更新周期后 执行回调函数。它的核心原理是 利用 JavaScript 的事件循环机制(Event Loop),结合微任务(Microtask)或宏任务(Macrotask&am…...

windows单节点验证victoriametrics结合AlertManger实现告警推送webhook

安装victoriametrics https://docs.victoriametrics.com/single-server-victoriametrics/下载地址 https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.113.0找到​​victoria-metrics-windows-amd64-v1.113.0.zip​​ https://github.com/VictoriaMetric…...

鸿蒙保姆级教学

鸿蒙(HarmonyOS)是华为推出的一款面向全场景的分布式操作系统,支持手机、平板、智能穿戴、智能家居、车载设备等多种设备。鸿蒙系统的核心特点是分布式架构、一次开发多端部署和高性能。以下是从入门到大神级别的鸿蒙开发深度分析&#xff0c…...

w264民族婚纱预定系统

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...

Compose 实践与探索十五 —— 自定义触摸

1、自定义触摸与一维滑动监测 之前我们在讲 Modifier 时讲过如下与手势检测相关的 Modifier: Modifier.clickable { } Modifier.combinedClickable { } Modifier.pointerInput {detectTapGestures { } }这里对以上内容就不再赘述了,直接去讲解更复杂的…...

炫酷的3D按钮效果实现 - CSS3高级特性应用

炫酷的3D按钮效果实现 - CSS3高级特性应用 这里写目录标题 炫酷的3D按钮效果实现 - CSS3高级特性应用项目介绍核心技术实现1. 基础结构设计2. 视觉效果实现2.1 背景渐变2.2 立体感营造 3. 交互动效设计3.1 悬停效果3.2 按压效果 技术要点分析1. 深度层次感2. 动画过渡3. 性能优…...

Flutter小白零基础入门到高级项目实战全集

Flutter零基础入门到高级项目实战全集内容如下: Dart入门基础教程16讲、Null safety 、late 关键字、空类型声明符?、非空断言!、required 、Flutter入门基础、Flutter瀑布流布局、Flutter动画、Flutter异步流、GlobalKey 、Flutter国际化、…...

teaming技术

一.介绍 在CentOS 6与RHEL 6系统中,双网卡绑定采用的是bonding技术。到了CentOS 7,不仅能继续沿用bonding,还新增了teaming技术。在此推荐使用teaming,因其在查看与监控方面更为便捷 。 二.原理 这里介绍两种最常见的双网卡绑定…...

前端开发:Vue以及Vue的路由

Vue是什么 警告:本文作者是底层程序员,对Vue只是偶尔用到,研究并不深入,对Vue的理解可能非常肤浅甚至存在错误,请多包含。以下文字只为外行记录分享,专业前端朋友可以略过。 作为一个底层老程序员&#x…...

【JavaEE进阶】Linux常用命令

目录 🍃前言 🌴pwd 与 ls 🚩pwd 🚩ls 🎍cd 🌲mkdir与touch 🚩mkdir 🚩touch 🍀cat与rm 🚩cat 🚩rm 🎋vim 🚩…...

【FastGPT】利用知识库创建AI智能助手

【FastGPT】利用知识库创建AI智能助手 摘要创建知识库上传文档创建应用准备提示词准备开场白关联知识库AI回答效果 摘要 关于FastGPT的部署,官方提供了docker-compose方式的部署文档,如果使用的是podman和podman-compose的同学,可以参考这篇…...

【DeepSeek 学c++】dynamic_cast 原理

用于向下转化。 父类引用指向指类对象 假设父亲是a, 子类是b. B* pb new B; 子类对象 A* pa 父类引用指向子类对象, 那么向上转化 Apa pb 这个是自动完成的,隐式转化,不需要dynamic_cast 向下转化指的是 A pa new B。 这个是指向子类对象…...

设计一套水产养殖系统

设计一套水产养殖系统 引言 水产养殖在全球粮食安全和经济发展中日益重要。它不仅为不断增长的人口提供了重要的蛋白质来源,还在许多地区创造了就业机会并促进了经济增长 。全球超过一半的人类消费的海产品来自水产养殖,并且这一比例预计将继续上升 。…...

【递归,搜索与回溯算法篇】- 名词解释

一. 递归 1. 什么是递归? 定义: 函数自己调用自己的情况关键点: ➀终止条件: 必须明确递归出口,避免无限递归 ➁子问题拆分: 问题需能分解成结构相同的更小的子问题缺点: ➀栈溢出风险&#x…...

以mysql 为例, 在cmd 命令行连接数据,操作数据库,关闭数据库的详细步骤

以下是使用 Windows 命令行(cmd) 操作 MySQL 的详细步骤,涵盖 连接数据库、基本操作、关闭数据库 的全流程: 1. 确保 MySQL 服务已启动 步骤: 打开命令行(cmd) 按 Win R,输入 cmd&…...

【数学建模】TOPSIS法简介及应用

文章目录 TOPSIS法的基本原理TOPSIS法的基本步骤TOPSIS法的应用总结 在 多目标决策分析中,我们常常需要在多个选择中找到一个最优解。 TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)法是一个广泛应用的决策方法…...

Beans模块之工厂模块注解模块@Qualifier

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...