第1章 Linux 简介
第2章 Linux 命令
第3章 开发相关

异常处理(掌握)

  

常用的 SpringMVC 异常处理方式主要有三种:

➢ 使用系统定义好的异常处理器 SimpleMappingExceptionResolver

➢ 使用自定义异常处理器

➢ 使用异常处理注解

 

SimpleMappingExceptionResolver 异常处理器

 

该方式只需要在 SpringMVC 配置文件中注册该异常处理器 Bean 即可。该 Bean 比较特殊,没有 id 属性,无需显式调用或被注入给其它<bean/>,当异常发生时会自动执行该类。

项目:simpleMappingExceptionResolver。在项目 receiveParameters-property 上修改。

 

自定义异常类

定义三个异常类:NameException、AgeException、StudentException。其中 StudentException 是另外两个异常的父类。

 

 

 

 

(1) 修改 Controller

 

 

(2) 注册异常处理器

 

 

➢ exceptionMappings:Properties 类型属性,用于指定具体的不同类型的异常所对应的异常响应页面。Key 为异常类的全限定性类名,value 则为响应页面路径

➢ defaultErrorView:指定默认的异常响应页面。若发生的异常不是 exceptionMappings 中指定的异常,则使用默认异常响应页面。

➢ exceptionAttribute:捕获到的异常对象。一般异常响应页面中使用。

 


(3) 定义异常响应页面

 

在 WebRoot 下新建一个目录 errors,在其中定义三个异常响应页面。

 

 

 

自定义异常处理器

 

使用 SpringMVC 定义好的 SimpleMappingExceptionResolver 异常处理器,可以实现发生指定异常后的跳转。但若要实现在捕获到指定异常时,执行一些操作的目的,它是完成不了的。此时,就需要自定义异常处理器。

自定义异常处理器,需要实现HandlerExceptionResolver接口,并且该类需要在SpringMVC配置文件中进行注册。

项目:customExceptionResolver。在项目 simpleMappingExceptionResolver 上修改。

 

(1) 定义异常处理器

当一个类实现了 HandlerExceptionResolver 接口后,只要有异常发生,无论什么异常,都会自动执行接口方法 resolveException()

 

 

(2) 注册异常处理器

 

 

异常处理注解

 

使用注解@ExceptionHandler 可以将一个方法指定为异常处理方法。该注解只有一个可选属性 value,为一个 Class<?>数组,用于指定该注解的方法所要处理的异常类,即所要匹配的异常。

 

而被注解的方法,其返回值可以是 ModelAndView、String,或 void,方法名随意,方法参数可以是 Exception 及其子类对象、HttpServletRequest、HttpServletResponse 等。系统会自动为这些方法参数赋值。

 

对于异常处理注解的用法,也可以直接将异常处理方法注解于 Controller 之中。

 

 

不过,一般不这样使用。而是将异常处理方法专门定义在一个类中,作为全局的异常处理类。需要使用注解@ControllerAdvice , 字面理解就是“控制器增强” ,是给控制器对象增强功能的。使用@ControllerAdvice 修饰的类中可以使用@ExceptionHandler。

当使用@RequestMapping 注解修饰的方法抛出异常时,会执行@ControllerAdvice 修饰的类中的异常处理方法。

@ControllerAdvice 是使用@Component 注解修饰的,可以<context:component-scan> 扫描到@ControllerAdvice 所在的类路径(包名),创建对象。

项目:annotationExceptionResolver。在项目 customExceptionResolver 上修改。

 

(1) 定义全局异常处理类

 

 

(2) 定义 Spring 配置文件

 

  

全部教程