一上来就出现了一个坑,它的出现异常后是默认跳转到error界面的。我说怎么都测试不出来默认的显示界面
准备好异常的界面,
- hello默认对异常不做处理
- test通过@ExceptionHandler注解来补获
=========================================
首先看:
默认错误
真的是啥也没有,如果灭有error.html
晕死,总是默认跳转到error.html(如果有)
=。=
通过@ExceptionHandler捕获
抛异常,页面显示异常信息
可以看出来,错误界面出现了异常信息
如果在一个Controller中有一个该注解修饰的方法,这个Controller里任意一个方法抛出异常就会由这个方法处理异常,而不会交给Servlet容器
因此出现了一个父类Controller的异常处理机制
父类异常处理
设定一个类,给里面的某个方法添加 @ExceptionHandler 注解然后其他类继承该类即可。.
同一个error界面
调用login产生异常
看得出来的确在运行
同样,调用find产生异常
.
父类异常处理虽好,但是耦合度太高,如若有一个类忘了继承base类,就会对后期的运行带来极大的不便
可以通过@ControllerAdvice注解来
@ControllerAdvice注解的类是当前项目中所有类的统一异常处理类
其实就是在base类上加了这个注解而已。。。
建议用@ControllerAdvice
如果返回View 方法的返回值是ModelAndView
如果需要返回Json 或String,方法上添加@ResponseBody
会自动将返回的集合 转换为JSON格式、、
全局处理异常的controller,返回JSON的那种
.