SpringMVC异常处理 - 极悦
SpringMVC教程
SpringMVC注解式开发
SpringMVC核心技术
SSM整合开发

SpringMVC异常处理

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

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

使用自定义异常处理器

使用异常处理注解

SimpleMappingExceptionResolver 异常处理器

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

项目: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 注解修饰的,可以 扫描到@ControllerAdvice 所在的类路径(包名),创建对象。

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

1、定义全局异常处理类

2、定义 Spring 配置文件

  

全部教程