11|第十一课:异常处理

一、异常处理

springMVC实现异常处理,必须实现HandlerExceptionResolver接口。

该接口的实现类都是异常的各种处理方式:

HandlerExceptionResolver接口实现类

(一)、@ExceptionHandler异常处理

1、异常处理方法

ExceptionHandlerExceptionResolver类:主要提供了的@ExceptionHandler注解,并通过该注解处理异常。

如果使用了@ExceptionHandler注解的方法类,该类中其他方法中抛出@ExceptionHandler注解的方法所捕获的异常,就转到@ExceptionHandler注解的方法去处理(相当于catch)。

@ExceptionHandler注解的方法捕获是最短优先(最接近抛出的异常)。例:有两个捕获异常的方法:第一个是针对ArithmeticException.class捕获,第二个是针对Exception.class的捕获。当抛出ArithmeticException异常的时候,就直接进入第一个方法(对ArithmeticException.class捕获的方法)。

例:

请求页面(index.jsp):

请求

Controller处理请求(这里新建一个类,类里面发生异常后,转到@ExceptionHandler注解的方法):

请求处理和异常的捕获处理

注意:这里@ExceptionHandler注解的方法的方法参数必须是异常类型(Trowable或其子类),不能包含其他类型的参数

异常展示页面:

处理异常的页面

例:针对@ExceptionHandler注解的方法捕获是最短优先(最接近抛出的异常)的案例。

这里上面例子的基础上,建立第二个例子。

Controller处理请求类:(最短优先)

请求处理类

2、异常处理类

通过@ControllerAdvice注解来注解异常处理类。

该@ControllerAdvice注解中的异常处理方法可以处理同一个包下任何类中的抛出异常。

如果类内部和包中都捕获了相同的异常,最短路径优先(执行类内部的捕获异常的方法)。

例:

请求页面(index.jsp):

请求

Controller处理请求(方法中故意抛出异常):

处理响应

异常处理类:

异常处理类

(二)、@ResponseStatue异常处理

ResponseStatusExceptionResolver类:自定义异常显示页面。主要提供了的@ResponseStatue注解。

@ResponseStatue注解:既可以用在类的前面,也可以用在方法(发生异常跳转到@ResponseStatue注解方法)的前面。

例:跳转到异常处理类

请求页面(index.jsp):

请求

Controller处理请求:

处理请求发生异常

自定义的异常类:

自定义异常处理

例:跳转到异常处理方法

请求页面(index.jsp):

请求

Controller处理请求(这里面既有处理请求,又有处理异常):

请求处理及异常处理

(三)、其他异常

1、DefaultHandlerExceptionResolver类

springMVC中特殊处理的一些异常。具体异常见底层代码(avaDoc中)。j例:405异常。

@see org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler

@see #handleNoSuchRequestHandlingMethod

@see #handleHttpRequestMethodNotSupported:如果springMVC的处理方法限制为POST方式,则实际请求的方式为GET,则会出发该异常页面,这个异常是springMVC自己默认的。

@see #handleHttpMediaTypeNotSupported

@see #handleMissingServletRequestParameter

@see #handleServletRequestBindingException

@see #handleTypeMismatch

@see #handleHttpMessageNotReadable

@see #handleHttpMessageNotWritable

@see #handleMethodArgumentNotValidException

@see #handleMissingServletRequestParameter

@see #handleMissingServletRequestPartException

 @see #handleBindException

2、SimpleMappingExceptionResolver类

通过配置来实现异常的处理。配置信息:

配置

例:

请求页面(index.jsp):

请求

Controller处理请求并抛出异常:

Controller处理请求并抛出异常

springmvc.xml配置:

配置

你可能感兴趣的:(11|第十一课:异常处理)