SpringMvc异常

异常处理类的介绍

类层次结构

异常处理类详解

1.    AnnotationMethodHandlerExceptionResolver

该类已经被弃用了,所以不建议使用,所以就不介绍该类。

2.    HandlerExceptionResolver

它是Spring MVC异常处理的通用接口,所以异常处理类都要实现该接口,不过需要注意的是,它只能处理请求过程中抛出的异常,异常处理本身所抛出的异常和视图解析过程中抛出的异常它是不能处理的。

3.    AbstractHandlerExceptionResolver

它是一个抽象类实现了HandlerExceptionResolver接口和Orderd接口,是HandlerExceptionResolver接口实现的基类,springMvc定义的异常处理类都继承了该类。

4.AbstractHandlerMethodExceptionResolver和ExceptionHandlerExceptionResolver

这两个类合力实现了对使用@ExceptionHandler注解的方法的解析,使被@ExceptionHandler标注的方法能处理异常,该注解只能作用于方法上。

5.    DefaultHandlerExceptionResolver

该异常类实现了对一些常见的web请问过程中的具体异常信息的处理,如NoSuchRequestHandlingMethodException等,具体可参考该类源码。

6.    ResponseStatusExceptionResolver

该类用于解析带有@ResponseStatus注解的异常类,该注解可以作用于类和方法,具体请看源码了解。

7.    SimpleMappingExceptionResolver

通过配置的异常类和view的对应关系来解析异常,它的使用需要手动配置,需要在配置文件中显示的声明才能生效,默认是不生效的。

exceptionMappings:定义springmvc 要处理的异常类型和对应的错误页面;

statusCodes:定义错误页面和response 中要返回的错误状态码;

defaultErrorView:定义默认错误页面,表示springmvc 处理不了的异常都跳转到该页面。

defaultStatusCode:定义response 默认返回的错误状态码,表示错误页面未定义对应的错误状态码时返回该值;在这里表示跳转到error、arrayOutView页面的状态码为500。

8.    HandlerExceptionResolverComposite

HandlerExceptionResolverComposite是作为容器使用,可以封装自定义的异常处理类,该类本身不会处理异常,而会调用自定义的异常处理类来处理异常,也需要显示的配置,order表示异常类执行的优先级。

9.    注意点

1.1一个基于Spring MVC的Web应用程序中,可以存在多个实现了HandlerExceptionResolver的异常处理类,他们的执行顺序,由其order属性决定, order值越小,越是优先执行, 在执行到第一个返回不是null的ModelAndView的异常解析类时,不再执行后续的尚未执行的异常处理类的异常处理方法。

1.2在使用标签时,spingMvc会默认自动将ExceptionHandlerExceptionResolver, ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver注入到Spring MVC的容器中,其中ExceptionHandlerExceptionResolver优先级最高,ResponseStatusExceptionResolver第二,DefaultHandlerExceptionResolver第三。

1.3使用SimpleMappingExceptionResolver,需要手动将 SimpleMappingExceptionResolver配置到Spring MVC的配置文件,从而注入容器中使用;

1.4 ExceptionHandlerExceptionResolver不仅可以解析处理器类(controller)中标注了@ExceptionHandler注解的方法(这中方法只对单个controller是生效的,所以得写多个),还可以在自定义异常处理类上使用@ControllerAdvice注解,在方法处理方法上使用 @ExceptionHandler注解,来对自定义的异常进行全局的异常处理;

注解的介绍

@ExceptionHandler

该注解只能作用于方法上,@ExceptionHandler 并且只对该注解所在的控制器(controller)有效,即只在当前controller中有效不能全局使用,可以通过继承方式解决,也可以使用@ControllerAdvice注解完成全局处理。

该注解只能作用于方法上,并且value为一个Throwable的子类,在方法上使用该注解修饰后,给方法就能处理该注解定义的异常。

@ResponseStatus

默认情况下Spring MVC在处理Web请求时,如果发现存在没有被应用代码捕获或者处理的异常信息,那么会返回状态码为500错误信息为Internal Server Error的提示信息。但是如果该异常是使用@ResponseStatus注解进行修饰过的,那么Spring MVC则会返回该注解上定义好的HTTP状体码及信息;该注解可以作用于类和方法。


该注解可以作用于方法和类上,该注解有两个参数,value表示HTTP的状态码,由于没有默认值,使用时必须得自定义一个状态码,reason为返回错去的原因,可以不指定;使用该注解后,用该注解修饰的类或方法就能在response中返回自定义的状态码。

@ControllerAdvice

该可以被应用于Springmvc容器中的所有的控制器类(controller)中,并且该注解只能作用于类及接口上,可以和@ExceptionHandler搭配使用进去全局的异常处理;

该注解只能作用于类或者接口,并且使用后能将我们自定义的异常处理类注入到SpringMvc的容器中,在自定义的异常处理类上可以加上它修饰,并且它可以和@ResponseStatus和@ExceptionHandler两个注解搭配使用,从而完成对自定义异常的处理。

你可能感兴趣的:(SpringMvc异常)