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框架层的异常,就无能为力了。

相关推荐
java李杨勇13 分钟前
基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)
大数据·爬虫·数据挖掘·1024程序员节·网络用户购物行为分析可视化平台·大数据毕业设计
博洋科技11 小时前
关于网站的权重和百度蜘蛛爬虫的关系
小程序·dubbo·网站建设·1024程序员节·保定h5网站建设·保定网站建设
lzb_kkk1 天前
【Vue】自定义指令、插槽
开发语言·前端·javascript·vue.js·前端框架·ecmascript·1024程序员节
dbln2 天前
贪心算法(一)
算法·贪心算法·1024程序员节
yala说2 天前
flink-状态
大数据·flink·1024程序员节
一个通信老学姐2 天前
专业135+总分400+华中科技大学824信号与系统考研经验华科电子信息与通信工程,真题,大纲,参考书。
考研·信息与通信·信号处理·1024程序员节
lzb_kkk3 天前
【JavaEE】UDP、TCP的API介绍
java·开发语言·网络·tcp/ip·udp·java-ee·1024程序员节
earthzhang20213 天前
《深入浅出HTTPS》读书笔记(17):公开密钥算法
网络协议·算法·http·https·1024程序员节
earthzhang20213 天前
《深入浅出HTTPS》读书笔记(16):消息验证码算法分类
开发语言·网络协议·算法·https·1024程序员节