瑞吉外卖(五) 全局异常处理

news2025/1/15 23:22:28

全局异常处理

  • 如何进行全局异常处理?
  • 效果展示
  • **@ControllerAdvice**

如何进行全局异常处理?

请添加图片描述
请添加图片描述
请添加图片描述

效果展示

在这里插入图片描述

@ControllerAdvice

在这里插入图片描述
本质上就是Component,然后,我们来看一下此类的注释:

这个类是为那些声明了(@ExceptionHandler、@InitBinder 或 @ModelAttribute注解修饰的)方法的类而提供的专业化的@Component , 以供多个 Controller类所共享。

说白了,就是aop思想的一种实现,你告诉我需要拦截规则,我帮你把他们拦下来,具体你想做更细致的拦截筛选和拦截之后的处理,你自己通过@ExceptionHandler、@InitBinder 或 @ModelAttribute这三个注解以及被其注解的方法来自定义。

  • @ExceptionHandler
    在这里插入图片描述
    接收Throwable类作为参数,我们知道Throwable是所有异常的父类,所以说,可以自行指定所有异常

比如在方法上加:@ExceptionHandler(IllegalArgumentException.class),则表明此方法处理
IllegalArgumentException 类型的异常,如果参数为空,将默认为方法参数列表中列出的任何异常(方法抛出什么异常都接得住)。

下面的例子:处理所有IllegalArgumentException异常,域中加入错误信息errorMessage 并返回错误页面error

  • @ControllerAdvice 配合 @ModelAttribute 预设全局数据
/**
 * Annotation that binds a method parameter or method return value
 * to a named model attribute, exposed to a web view. Supported
 * for controller classes with {@link RequestMapping @RequestMapping}
 * methods.
 * 此注解用于绑定一个方法参数或者返回值到一个被命名的model属性中,暴露给web视图。支持在
 * 在Controller类中注有@RequestMapping的方法使用(这里有点拗口,不过结合下面的使用介绍
 * 你就会明白的)
 */
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ModelAttribute {

	@AliasFor("name")
	String value() default "";

	@AliasFor("value")
	String name() default "";

	boolean binding() default true;

}


实际上这个注解的作用就是,允许你往 Model 中注入全局属性(可以供所有Controller中注有@Request Mapping的方法使用),value 和 name 用于指定 属性的 key ,binding 表示是否绑定,默认为 true。

具体使用方法如下:
在这里插入图片描述

  • @InitBinder

@ControllerAdvice 配合 @InitBinder 实现对请求参数的预处理

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface InitBinder {
	/**
	 * The names of command/form attributes and/or request parameters
	 * that this init-binder method is supposed to apply to.
	 * <p>Default is to apply to all command/form attributes and all request parameters
	 * processed by the annotated handler class. Specifying model attribute names or
	 * request parameter names here restricts the init-binder method to those specific
	 * attributes/parameters, with different init-binder methods typically applying to
	 * different groups of attributes or parameters.
	 * 粗略翻译:此init-binder方法应该应用于的命令/表单属性和/或请求参数的名称。默认是应用于所有命	   		* 令/表单属性和所有由带注释的处理类处理的请求参数。这里指定模型属性名或请求参数名将init-binder		 * 方法限制为那些特定的属性/参数,不同的init-binder方法通常应用于不同的属性或参数组。
	 * 我至己都理解不太理解这说的是啥呀,我们还是看例子吧
	 */
	String[] value() default {};
}

在这里插入图片描述

这样之后呢,就可以实现全局的实现对 Controller 中RequestMapping标识的方法中的所有 String 和Date类型的参数都会被作相应的处理。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/45008.html

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

相关文章

Airtest手机APP自动化操作微信

感觉Appium太垃圾了&#xff0c;于是顺手学了下Airtest 安装并解压 官网&#xff0c;有很显眼的下载按钮 下载完zip文件后进行解压 启动自带AirtestIDE.exe 不想登录的可以跳过 因为提前通过数据线连接了手机和电脑了&#xff0c;所以一进去就显示已经连接到手机设备了 当然…

前端css元素yi

996技术站 - 活在未来 | KingSun966技术站&#xff0c;极客带你看世界&#xff01;https://www.996station.com程序员开发指南Descriptionhttps://guide.996station.com css元素溢出 当子元素的尺寸超过父元素的尺寸时&#xff0c;需要设置父元素显示溢出的子元素的方式&#x…

[附源码]SSM计算机毕业设计小锅米线点餐管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Redis——》数据类型:bitmap

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》数据类型&#xff1a;bitmap一、底层结构二、最大长度三、操作示…

IPv6进阶:IPv6 过渡技术之 6to4 自动隧道

实验拓扑 R1-R3-R2之间的网络为IPv4公网&#xff1b;PC1及PC2处于IPv6孤岛。 实验需求 R1及R2为IPv6/IPv4双栈设备&#xff1b;在R1及R2上部署6to4自动隧道使得PC1及PC2能够互相访问。 实验步骤及配置 Internet Router的配置如下 [R3] interface GigabitEthernet0/0/0 [R3…

gan与dcgan训练自己的数据集

gan https://blog.csdn.net/weixin_50113231/article/details/122959899 dcgan 源码地址&#xff1a;https://github.com/carpedm20/DCGAN-tensorflow 安装教程 环境配置 将代码克隆到本地后首先按照官网所需依赖环境进行配置 由于该文章比较早所以python与tensorflow最好按…

做好QA质量管理,4大注意事项和技巧。

1、QA检查单&#xff1a;全过程质量管理体系。 为了做好过程质量管理&#xff0c;QA检查单需要按照检查类型、检查阶段、实践域、检查对象、检查项进行层层划分&#xff0c;构建了全过程质量管理体系。 如QA检查单按照检查阶段划分为&#xff1a;需求分析、系统设计、系统实现、…

5G无线技术基础自学系列 | SU-MIMO原理

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 通过多天线技术支持单用户在上下行数据…

SSM考试题库管理系统毕业设计源码069043

SSM考试题库管理系统 摘 要 随着计算机办公自动化程度的不断提高&#xff0c;开发各种数据库管理应用软件用于各种工作中能有效地提高工作效率&#xff0c;节省时间&#xff0c;能使学校的教学工作上一个新的台阶。传统的人工命题形成试卷&#xff0c;往往会出现大量的重复劳动…

java 串口通讯获取检验码

/*** 获取校验码* crc16 X16x15x21* 16进制报文是 02 03 00 00 00 40 CRC16* 传输的str&#xff1a;“020300000040”* 结果&#xff1a;4409* param str* return*/ public static String getCRC(String str) {byte[] bytes NumberUtils.hexStringToBytes(str);int CRC 0x000…

【Spring Boot】Spring Boot 统一功能处理

文章目录Spring拦截器为何需要Spring拦截器&#xff1f;自定义拦截器加入系统配置并配置拦截规则验证登陆拦截器添加统一访问前缀验证统一前缀是否添加成功统一异常处理统一数据返回格式Spring拦截器 为何需要Spring拦截器&#xff1f; 在之前Servlet开发中&#xff0c;对登陆…

深入理解java虚拟机:虚拟机字节码执行引擎(2)

文章目录3. 方法调用3.1 解析3.2 分派接着深入理解java虚拟机&#xff1a;虚拟机字节码执行引擎&#xff08;1&#xff09;&#xff0c;我们继续往下看&#xff1a; 3. 方法调用 方法调用并不等同于方法执行&#xff0c;方法调用阶段唯一的任务就是确定被调用方法的版本&…

【LeetCode每日一题】——771.宝石与石头

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 771.宝石与石头 四【题目描述】 给你一个字符串…

配电网电压调节及通信联系研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

三年城市NOH落地100城,毫末智行内部信剑指2025

11月29日&#xff0c;毫末智行董事长张凯、CEO顾维灏联合发布《毫末智行三周岁&#xff1a;三年磨一剑 利刃开新篇》的内部信&#xff0c;提到毫末愿景及战略目标&#xff1a;“让机器智能移动&#xff0c;给生活更多美好。”未来成长为一家产品矩阵覆盖全无人驾驶、机器人等多…

[附源码]Python计算机毕业设计Django“科教兴国”支教门户网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【毕业设计】26-基于单片机心跳体温血压系统仿真设计(原理图+仿真+演示视频+论文)

【毕业设计】基于单片机心跳体温血压系统仿真设计&#xff08;原理图仿真演示视频论文&#xff09; 文章目录【毕业设计】基于单片机心跳体温血压系统仿真设计&#xff08;原理图仿真演示视频论文&#xff09;任务书设计说明书摘要设计说明书及设计文件任务书 以单片机为控制核…

DPDK helloworld示例程序

目录 helloworld源代码 helloword编译 helloworld代码解析 DPDK的helloworld示例程序&#xff0c;用以示例DPDK应用程序的编写和使用。 helloworld源代码 helloworld代码构成&#xff1a; /* 省略系统头文件*//* DPDK相关的rte头文件 */ #include <rte_memory.h>…

springboot 集成JWT实现token验证

JWT介绍 是一种开放标准 &#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且独立的方式&#xff0c;用于将信息作为 JSON 对象在各方之间安全地传输。该信息可以进行验证和信任&#xff0c;因为它是经过数字签名的。JWT 可以使用密钥&#xff08;使用 HMAC 算法…

拾忆书苑(图书商城系统)网站的设计与实现(html;DIV+CSS; Bootstrap; Dreamweaver; Photoshop)

目 录 一、绪论 1 &#xff08;一&#xff09;课题研究背景 1 &#xff08;二&#xff09;课题研究目的及意义 1 二、相关技术与工具介绍 1 &#xff08;一&#xff09;Dreamweaver开发技术 1 &#xff08;二&#xff09;Adobe Photoshop 1 三、拾忆书店网站的设计与分析 2 &am…