springMVC如何处理异常?做一小结:
1、第一种方法:
(1)在handler中,添加一个处理异常的方法该方法必须实现@ExceptionHandler注解,此注解有一个value属性,是一个class数组,可以使一个方法同时处理多个不同类型的异常。例子:
@ExceptionHandler({ArithmeticException.class, ArrayIndexOutOfBoundsException.class})
public String isException(Exception ex) {
System.err.println("出错了: " +ex);
return "error";
}
在此handler中的方法如果出现ArithmeticException或ArrayIndexOutOfBoundsException异常则会交给此方法处理,在控制台打印异常信息,并进入error页面。练习截图:
(2)若希望将异常信息打印到页面上,则需要使用ModelAndView对象作为返回值:
error页面中的写法为:
(3)@ExceptionHandler注解标注的方法有优先级:
一个是RuntimeException,一个是ArithmeticException,如果出现除数为0的情况则会执行第二个方法,因为ArithmeticException异常与除数为0精确匹配。即精确匹配的优先级高。
2、第二种方法,专门写一个异常处理的类,并且为此类添加@ControllerAdvice注解即可用来专门处理异常,handler中不需添加其他注解和方法。
详细解释:如果在当前handler中找不到@ExceptionHandler 标记的方法,则会去 @ControllerAdvice 标记的类中查找 @ExceptionHandler 标记的方法来处理异常。
练习截图:
3、添加 @ResponseStatus 注解,异常信息会在页面打印:
(1)在类名上添加 @ResponseStatus 注解
假设i的值为13时抛出该异常:
则会在页面中打印如下异常信息:
(2)在方法名上添加 @ResponseStatus 注解则无论i是否等于13都会抛出异常。即添加了该注解的方法就会抛出下图异常:
4、在springMVC的配置文件中处理异常,例如出现数组下标越界异常则跳转到error页面。练习截图:
如果要在异常页面打印异常信息,则exceptionAttribute的value值必须与页面中相同:
在error页面打印异常信息:
总结完毕。