Spring MVC相关异常类

news2024/9/21 18:57:37

Spring MVC相关异常类

    • 使用@ResponseStatus修饰异常类
    • 使用@ExceptionHandler修饰异常处理方法

使用@ResponseStatus修饰异常类

如果希望程序抛出自定义异常时也能被异常解析器解析成HTTP状态码,从而显示Web服务器提供的错误页面,就像前面DefaultHandlerExceptionResolver的行为那样,则可使用Spring MVC提供的@ResponseStatus注解。
@ResponseStatus可用于修饰异常类,为该异常类指定对应的状态码和错误原因,这样当控制器的处理方法抛出该异常时,将由ResponseStatusExceptionResolver负责解析成对应的HTTP状态码。
此外,@ResponseStatus还可用于修饰方法,当使用该注解修饰方法时,通常会与@ExceptionHandler注解结合使用。
@ResponseStatus注解支持的属性如表
在这里插入图片描述
@ResponseStatus注解其实很简单,通常只需指定value或code属性,指定该异常类对应的HTTP状态码。
需要说明的是,当使用该注解修饰异常类,或者该注解指定了reason属性之后,Spring MVC底层会调用HttpServletResponse的sendError()方法来输出响应消息。
一旦调用了HttpServletResponse的sendError()方法,整个响应就完成了,后面不应该继续输出任何内容。因此,@ResponseStatus注解不适合在RESTful API中使用。注意
避免在RESTful API中使用@ResponseStatus注解。如果希望RESTful API也能生成带HTTP状态码的响应消息,只要让处理方法返回ResponseEntity对象即可,就如第6章所介绍的那样。
下面对上一个示例略做修改,先删除Spring MVC配置文件中关于SimpleMappingExceptionResolver异常解析器的配置,不再使用这种“老旧”的异常处理机制。
接下来定义一个自定义的异常类。

在这里插入图片描述

该异常类使用了@ResponseStatus注解修饰,并指定了code和reason属性,这意味着当控制器的处理方法抛出该异常时,该异常就会被解析成HttpStatus.FORBIDDEN状态码,并使用reason指定异常原因。
该示例对BookServiceImpl实现类略做修改,使之能抛出自定义的BookException异常。下面是BookServiceImpl实现类的代码。
在这里插入图片描述
从上面的粗体字代码可以看出,当Book的price属性值小于或等于50时,该方法会抛出BookException异常。

由于本示例不再需要argerror.jsp、sqlerror.jsp、error.jsp等错误页面,而是直接使用Web服务器提供的错误页面,因此可删除/WEB-INF/content目录下的argerror.jsp、sqlerror.jsp、error.jsp文件。

部署、运行该应用,请求/bookForm,应用会显示/WEB-INF/content/bookForm.jsp页面,在该页面的price表单域中输入小于50的数值后提交表单,将看到如图
在这里插入图片描述

使用@ExceptionHandler修饰异常处理方法

@ExceptionHandler注解修饰的方法被当成异常处理方法,当控制器的处理方法抛出异常时,该方法将会自动执行,对异常进行处理。

@ExceptionHandler注解只支持一个value属性,该属性可通过数组指定一系列的异常类名,表明只有当处理方法抛出对应的异常时,@ExceptionHandler注解修饰的异常处理方法才会自动执行。

@ExceptionHandler注解修饰的异常处理方法可声明如下类型形参。
➢ 任何异常类型:用于访问处理方法抛出的异常。
➢ ServletRequest、ServletResponse、HttpSession等:用于访问Servlet API。
➢ WebRequest或NativeWebRequest:其作用等同于在控制器的处理方法中声明这种类型的形参。
➢ Locale:用于访问客户端的语言区域。
➢ InputStream、Reader、OutputStream或Writer:用于直接访问请求或响应的IO流。
➢ Model:代表模型对象。
@ExceptionHandler注解修饰的异常处理方法可返回如下类型的返回值。
➢ ModelAndView:该返回值同时包含Model和View。
➢ Model或Map:该返回值只有模型数据,Spring MVC会使用RequestToViewNameTranslator隐式获取视图名。
➢ View:该返回值就是视图对象。
➢ String:该返回值代表逻辑视图名。
➢ HttpEntity<?>、ResponseEntity<?>或@ResponseBody修饰的方法:该方法的返回值将直接作为响应消息,通常用于RESTful API开发。
➢ void:当异常处理方法自行通过ServletResponse或HttpServletResponse生成响应消息时,可将该方法的返回值声明为void;否则,如果将异常处理方法的返回值声明为void,Spring MVC会使用RequestToViewNameTranslator隐式获取视图名。
下面示例还是对前面的SimpleMappingExceptionResolver示例略做修改,先删除Spring MVC配置文件中关于SimpleMappingExceptionResolver异常解析器的配置,不再使用这种“老旧”的异常处理机制。

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

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

相关文章

统一规范化,东盟区域化发展,致力于建立电动汽车生态系统

根据印尼外交部东盟经济合作司司长的透露&#xff0c;东盟正在致力于建立一个电动汽车生态系统&#xff0c;并期望得到东亚邻国的支持。具体而言&#xff0c;东盟计划在“APT”机制下宣布新的电动汽车生态系统合作计划&#xff0c;并预计在下个月举行的第 43 届东盟峰会上正式宣…

回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程…

自己实现 SpringMVC 底层机制 系列之--实现任务阶段 2- 完成客户端浏览器可以请求控制层

&#x1f600;前言 本文是自己实现 SpringMVC 底层机制的第二篇之完成实现任务阶段 2- 完成客户端浏览器可以请求控制层 &#x1f3e0;个人主页&#xff1a;尘觉主页 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TabAxc96-1692497234107)(https://…

Spring MVC异常处理

Spring MVC异常处理 Spring MVC异常处理机制HandlerExceptionResolver的实现类DefaultHandlerExceptionResolver实现类DefaultHandlerExceptionResolver 在Controller的请求处理方法中手动使用try…catch块捕捉异常&#xff0c;当捕捉到指定的异常时&#xff0c;系统返回对应的…

ABBYY FineReader15最新专业的PDF OCR图片文字识别软件

ABBYY FineReader PDF15是专业的OCR图片文字识别软件&#xff0c;可以快速、准确、方便地将扫描纸质文件、PDF格式及数字或移动电话图像转换成可编辑格式——Microsoft Word、Excel、PowerPoint、可检索的PDF、HTML、DjVu等。99.8%的识别准确率即刻识别文本&#xff0c;复制和粘…

Stanley 轨迹跟踪算法研究

Stanley 轨迹跟踪算法研究 理论基础 首先还是阅读论文 《基于改进鲸鱼优化算法的Stanley算法研究》 《复杂环境下的移动机器人路径规划技术研究》 《Stanley:The Robot that Won the DARPA Grand Challenge》 《无人驾驶汽车轨迹跟随控制研究》 《基于混合算法的校园智能车路…

【kafka】-分区-消费端负载均衡

一.为什么kafka要做分区&#xff1f; 因为当一台机器有可能扛不住&#xff08;类比&#xff1a;就像redis集群中的redis-cluster一样&#xff0c;一个master抗不住写&#xff0c;那么就多个master去抗写&#xff09;&#xff0c;把一个队列的单一master变成多个master&#xf…

学习嵌入式

最近&#xff0c;打算了解一些关于嵌入式的知识。这里先了解嵌入式到底是什么。

[ MySQL ] — 常见函数的使用

目录 日期函数 current_date — 获取当前日期 current_time — 获取当前时间 current_timestamp — 获取当前时间戳 date — 获取参数的日期部分 ​编辑 date_add — 在日期或时间的基础上进行增加 date_sub — 在日期或时间的基础上进行减少 datediff — 计算两个日期相差…

快速上手Linux核心命令:Linux系统信息相关命令

前言 这期呢主要说一说Linux中与系统相关的命令&#xff0c;一共包含10个命令 uname 显示系统信息 1、简介 uname命令用于显示系统相关信息&#xff0c;比如内核版本号、硬件架构等 2、语法格式 uname [参数选项] 3、参数说明 参数参数说明-a显示系统所有相关信息-m显示计算…

通过重构来加深理解——DDD

要想成功地开发出实用的模型&#xff0c;需要注意以下三点&#xff1a; &#xff08;1&#xff09;复杂巧妙的领域模型是可以实现的&#xff0c;也是值得我们去花费力气实现的。 &#xff08;2&#xff09;这样的模型离开不断的重构是很难开发出来的&#xff0c;重构需要领域专…

2. Linux Server 20.04 Qt5.14.2配置Jetson Orin Nano Developer Kit 交叉编译环境

最近公司给了我一块Jetson Orin Nano的板子&#xff0c;先刷了系统&#xff08;1.Jetson Orin Nano Developer Kit系统刷机&#xff09;又让我搭建交叉编译环境&#xff0c;所以有了下面的文章 一 :Qt5.14.2交叉编译环境安装 1.准备 1.1设备环境 1.1.1 Server: Ubuntu20.0…

md文本学习

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

腾讯云轻量应用服务器配置_网站上线全流程

腾讯云轻量应用服务器CPU内存带宽配置高&#xff0c;成本很低&#xff0c;腾讯云百科来详细说下腾讯云服务器从购买、配置到网站上线全流程&#xff0c;包括轻量服务器配置选择、应用镜像选择、重置密码、防火墙开放端口教程等详细教程&#xff1a; 目录 一&#xff1a;注册腾…

年薪100w的项目组合和项目集经理与项目经理的区别

项目经理未来的发展是什么&#xff1f;很多人经常问&#xff0c;专业的路可以是项目集&#xff0c;项目组合经理&#xff0c;也可以是PMO等等。为什么项目集经理&#xff0c;项目组合经理就挣得比较多呢&#xff1f;今天为大家一一揭秘&#xff01; 项目经理、项目集经理和项目…

【2023年11月第四版教材】《第5章-信息系统工程(合集篇)》

《第5章-信息系统工程&#xff08;合集篇&#xff09;》 章节说明1 软件工程1.1 架构设计1.2 需求分析1.3 软件设计1.4 软件实现&#xff3b;补充第三版教材内容&#xff3d; 1.5 部署交付 2 数据工程2.1 数据建模2.2 数据标准化2.3 数据运维2.4 数据开发利用2.5 数据库安全 3 …

攻防世界-backup

原题 解题思路 备份文件后缀大多是bak、git、svn、swp等&#xff0c;尝试index.php.bak就有文件下载了:

文件型数据库Derby操作示例

1.下载db-derby-10.14.2.0-bin.zip 2.启动数据库&#xff0c;两种方式 1) 可执行程序 Windows可以运行ij.bat, Linux可以运行ij Ij.bat, ij在bin目录里 2&#xff09;通过执行jar包形式启动 Derbyrun.jar在lib目录里 执行Java -jar derbyrun.jar ij 启动 2. 连接数据库 …

除了提升编码能力,养成这4个工作习惯,让你成为更优秀的前端开发者

如果你想成为一名优秀的前端开发者&#xff0c;你需要拥有不仅仅是技术知识。如今&#xff0c;由于谷歌和其他资源的存在&#xff0c;获取技术知识比以前更容易了。而真正能够产生差异的是习惯。就像心理强度对于个人成长很重要一样&#xff0c;有些习惯可以让你成为一个更有效…

七夕最强Python表白代码来了

点击上方Python小二&#xff0c;选择星标公众号 干货速达&#xff0c;不迷路 快到七夕了&#xff0c;大家都懂&#xff0c;这里不过多解释了&#xff0c;送大家几段节日专属Python代码。 玫瑰 毫无疑问&#xff0c;玫瑰一直都是七夕、520......这类节日的专属&#xff0c;带文字…