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

SpringMVC全局异常处理

一、Java中的异常

定义:异常是程序在运行过程中出现的一些错误,使用面向对象思想把这些错误用类来描述,那么一旦产生一个错误,即创建某一个错误的对象,这个对象就是异常对象。

类型:

声明异常:在每个方法声明中,使用键字throws标识该方法可能抛出的必检异常的类型称为声明异常,如此告知方法的调用者该方法内可能有此类异常。

public void myMethod() throws IOException {     //some code }

抛出异常:当检测到错误的程序可以创建一个合适的异常类型的实例并抛出它就叫做抛出一个异常。

IllegalArgumentException ex=new II1egalArgumentException("EX Msg"); throw ex; 或者 throw new IllegalArgumentException("EX Msg");

捕获异常:当抛出一个异常时,可以在try-catch代码块中捕获和处理。try语句块中是可能出现问题的代码;catch语句块中是出现问题并捕获后,处理问题的代码内容,如果问题在try语句块中没有出现则catch中语句不会运行;finally语句块中是不管问题异常是否产生都要执行的代码内容。

try{    

        codeA;//业务代码A    

throw new BizException(“邮箱格式错误!”);//抛出异常    

codeB;//业务代码B

} catch(Exception e) {    

codeC;//处理异常代码

} finally {    

codeD;//关闭资源(IO 数据库 网络),收尾处理的一些工作

}

自定义异常:

二、SpringMVC异常处理

        编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。在开发中,不管是Dao层、Service层还是Controller层,都有可能抛出异常。在SpringMVC中,能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。使用一个友好的页面显示,而不是一堆看不懂的错误信息。

全局统一异常实现方式

自带的SimpleMappingExceptionResolver

实现HandlerExceptionResolver接口

@ControllerAdvice + @ExceptionHandler注解

1、方式一:默认异常处理器

2、方式二:实现HandlerExceptionResolver接口

(1)创建异常处理器:在工程中创建GlobalExceptionResolver异常处理器类,捕获异常后页面跳转到error页面。

(2)注册异常处理器Bean:在spring-mvc.xml中,注册定义的GlobalExceptionResolver处理器。

或者在自定义异常处理类上添加@Component注解

(3)自定义异常类:创建自定义BizException异常类,业务代码统一使用自定义异常BizException抛出错误信息。

(4)定义业务处理器方法:在Controller中,定义获取图书信息方法,并返回结果。如果图书ID传入大于100时,抛出数据获取异常信息。

(5)创建异常显示视图:使用error.jsp页面统一显示系统中出现的异常信息。

3、方式三:@ControllerAdvice+@ExceptionHandler

(1)创建异常处理器:创建GlobalExceptionHandler异常处理器类,根据捕获的不同异常,并返回相应的异常信息。

(2)定义业务处理器方法:在Controller中,定义获取图书信息方法,并返回结果。如果图书ID传入大于100时,抛出数据获取异常信息。

        全局异常处理只能捕获Controller层未捕获(或往外抛)的异常,对于 Interceptor层的异常,或Spring框架层的异常,就无能为力了。


http://www.kler.cn/a/429463.html

相关文章:

  • Kylin Linux V10 替换安装源,并在服务器上启用 EPEL 仓库
  • 宇泰串口卡驱动在Ubuntu22.04编译、安装汇总
  • [Do374]Ansible一键搭建sftp实现用户批量增删
  • HTML拖拽功能(纯html5+JS实现)
  • 论文阅读:Searching for Fast Demosaicking Algorithms
  • 【Unity-Animator】通过 StateMachineBehaviour 实现回调
  • 3D 生成重建017-StyleGaussian用文本或图像对你的3DGS内容进行风格迁移
  • 分布式定时任务解决方案(redis版)
  • 视频自定义全屏功能——兼容安卓和ios
  • TensorFlow深度学习实战(1)——神经网络与模型训练过程详解
  • 前端成长之路:HTML(1)
  • 【前端】理解 JavaScript 对象属性访问的复杂性
  • 数据结构——图(遍历,最小生成树,最短路径)
  • 基于阿里云Ubuntu22.04 64位服务器Java及MySql环境配置命令记录
  • mtcnn+facenet+svm实现人脸识别系统
  • 头歌答案--爬虫实战
  • .NET Framework修复工具
  • Conda 虚拟环境,共用一个还是各用各的?
  • superset 配置Connect a database
  • golang 汉字转拼音
  • java+ssm+mysql商品管理系统
  • FreeFileSync文件夹比较同步v13.9
  • 【Unity】【VR开发】摩托车游戏开发笔记1-摩托车手把旋转时轴位移问题
  • 1-1.mysql2 之 mysql2 初识(mysql2 初识案例、初识案例挖掘)
  • QtCreator UI界面 菜单栏无法输入中文
  • 基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人