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.mzph.cn/pingmian/73246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入LangChain:LLM交互机制与RAG集成的技术

本文将聚焦于 LangChain 如何集成检索增强生成(RAG),了解其架构、主要组件,以及与 LLM 的交互 LangChain 架构概览 1、基础层 这是与各类 LLM 对接的 “桥梁”。LangChain 支持多种流行的 LLM,如 OpenAI 的系列模型、H…

本地部署 LangManus

本地部署 LangManus 0. 引言1. 部署 LangManus2. 部署 LangManus Web UI 0. 引言 LangManus 是一个社区驱动的 AI 自动化框架,它建立在开源社区的卓越工作基础之上。我们的目标是将语言模型与专业工具(如网络搜索、爬虫和 Python 代码执行)相…

SQL注入(SQL Injection)攻击原理与防御措施

SQL是一种代码注入技术,可使攻击者修改应用程序向数据库提供的查询。 迄今为止,最常见和最严重的应用 程序安全威胁总是隐藏在与数据库有某些连接的网络应用 程序中。 通过这种 SQL 注入,攻击者可以绕过登录程序,获取、更改甚至更…

【算法】十大排序算法(含时间复杂度、核心思想)

以下是 **十大经典排序算法** 的时间复杂度、空间复杂度及稳定性总结,适用于面试快速回顾:排序算法对比表 排序算法最佳时间复杂度平均时间复杂度最差时间复杂度空间复杂度稳定性核心思想冒泡排序O(n)O(n)O(n)O(1)稳定相邻元素交换,大数沉底…

LVS的 NAT 模式实现 3 台RS的轮询访问

使用LVS的 NAT 模式实现 3 台RS的轮询访问 1.配置 RS(NAT模式)2. 配置 LVS 主机(仅主机、NAT模式)2.1 配置仅主机网卡(192.168.66.150/24 VIP )2.2 配置 NAT 网卡(192.168.88.6/24 DIP&#xff…

一、MySQL8的my.ini文件

MySQL8.0.11的安装版本my.ini配置文件默认存放在:C:/Program Files/MySQL/MySQL Server 8.0/ 目录下;而MySQL8.0.11绿色免安装版本是没有my.ini配置文件,用户可以自行构建后,再通过my.ini进行数据库的相关配置 一、MySQL8.0.11默…

微调这件小事:训练集中的输入数据该作为instruction还是input?从LLaMA-Factory的源码中寻找答案吧~

在之前的博文中,我们已经了解了LLaMA-Factory框架执行各类任务的流程。今天,我们将深入探讨SFT微调过程中关于数据集的两个关键问题: 数据集中的instruction和input是如何结合起来生成大模型可以理解的输入的?instruction是不是就是system prompt呢?(之所以会问这个问题,…

nacos-actuator漏洞

1、nacos配置文件添加以下配置 vim application.properties# 添加以下配置项 management.endpoints.enabled-by-defaultfalse management.server.port-12、重启Nacos systemctl restart nacos3、验证 打开地址http://ip:port/nacos/actuator查看是否有敏感信息输出&#xff0…

extern关键字的用法

目录 总述 一、声明外部变量 二、声明外部函数 三、实现模块化编程 四、与"C" 连用,实现C和C的混合编程 五、注意事项 六、疑点补充(你可能会有和我一样的疑问?) 总述 在C和C中,extern关键字用于声明外…

Jboss漏洞再现

一、CVE-2015-7501 1、开环境 2、访问地址 / invoker/JMXInvokerServlet 出现了让下载的页面,说明有漏洞 3、下载ysoserial工具进行漏洞利用 4、在cmd运行 看到可以成功运行,接下来去base64编码我们反弹shell的命令 5、执行命令 java -jar ysoserial-…

Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现

一、前言 在移动互联网蓬勃发展的今天,视频播放功能已成为众多Android应用的核心特性之一。面对多样化的视频格式和传输协议,开发一款高效、稳定的视频播放器是许多开发者追求的目标。FLV(Flash Video)格式,尽管随着H…

BUAA XCPC 2025 Spring Training 2

C \color{green}{\texttt{C}} C [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 给定一棵以 1 1 1 为根的树,记 a i a_{i} ai​ 表示节点 i i i 的权值, lca( i , j ) \text{lca(}i,j) lca(i,j) 表示节…

MySQL 中,分库分表机制和分表分库策略

在 MySQL 中,分库分表是一种常见的数据库水平扩展方案,用于解决单库单表数据量过大导致的性能瓶颈问题。通过将数据分散到多个数据库或表中,可以提高系统的并发处理能力、降低单点故障风险,并提升查询性能。 一、分库分表的作用 提升性能: 分散数据存储和查询压力,避免单…

组件日志——etcd

目录 一、简介 二、安装【Ubuntu】 安装etcd 安装CAPI 三、写一个示例 3.0写一个示例代码 3.1获取一个etcd服务 3.2获取租约(写端操作) 3.3使用租约(写端操作) 3.4销毁租约(写端操作) 3.5获取etcd服务中的服务列表(读端操作) 3.6监听状态变化(读端操作) 一、简介 Et…

python网络爬虫开发实战之网页数据的解析提取

目录 1 XPath的使用 1.1 XPath概览 1.2 XPath常用规则 1.3 准备工作 1.4 实例引入 1.5 所有节点 1.6 节点 1.7 父节点 1.8 属性匹配 1.9 文本获取 1.10 属性获取 1.11 属性多值匹配 1.12 多属性匹配 1.13 按序选择 1.14 节点轴选择 2 Beautiful Soup 2.1 简介…

理解操作系统(一)冯诺依曼结构和什么是操作系统

认识冯诺依曼系统 操作系统概念与定位 深⼊理解进程概念,了解PCB 学习进程状态,学会创建进程,掌握僵⼫进程和孤⼉进程,及其形成原因和危害 1. 冯诺依曼体系结构 我们常⻅的计算机,如笔记本。我们不常⻅的计算机&am…

Tomcat常见漏洞攻略

一、CVE-2017-12615 漏洞原理:当在Tomcat的conf(配置⽬录下)/web.xml配置⽂件中添加readonly设置为false时,将导致该漏洞产 生,(需要允许put请求) , 攻击者可以利⽤PUT方法通过精心构造的数据包…

快速求出质数

要快速判断一个数是否为质数,可以采用以下优化后的试除法,结合数学规律大幅减少计算量: 步骤说明 处理特殊情况: 若 ( n \leq 1 ),不是质数。若 ( n 2 ) 或 ( n 3 ),是质数。若 ( n ) 能被 2 或 3 整除&…

Linux上位机开发实战(camera视频读取)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 关于linux camera,一般都是认为是mipi camera,或者是usb camera。当然不管是哪一种,底层的逻辑都是v4l2&#x…

高性能缓存:使用 Redis 和本地内存缓存实战示例

在现代高并发系统中,缓存技术是提升性能和降低数据库压力的关键手段。无论是分布式系统中的Redis缓存,还是本地高效的本地内存缓存,合理使用都能让你的应用如虎添翼。今天,我们将基于go-dev-frame/sponge/pkg/cache库的代码示例&a…