更新时间:2021-09-10 10:20:46 来源:极悦 浏览1121次
该方式进行异常处理的方法必须与出错的方法在同一个Controller里面。使用如下:
// 这个异常处理只会在本类中起作用
@ExceptionHandler(RuntimeException.class)
public String catchException(RuntimeException e){
System.out.println(e.getMessage());
return "error";
}
这种异常处理可以根据不同的异常在同一个Controller中配置多个,但是它们只能在该Controller中起作用。
HandlerExceptionResolver是SpringMVC为我们提供的一个统一异常处理的接口,实现机制也十分简单。注意该类要注入到spring中。
@Component
public class GlobalException implements HandlerExceptionResolver {
// 自定义全局异常处理在mvc一直起作用
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
if (e instanceof MyException) {
return new ModelAndView("error1");
} else if (e instanceof RuntimeException){
return new ModelAndView("error2");
}
return new ModelAndView("error3");
}
这种方式也可以进行异常处理,而且是全局。但是这种方式也有一定的弊端,全部的处理都打在一个方法里面,没有解耦合,后期不利于我们维护。
为了结合上面俩种方式的优点,Spring3.2为我们提供了一个新的注解@ControllerAdvice。注意该类要注入到spring中。
@ControllerAdvice
@Component
public class HandlerAndAdvice {
@ExceptionHandler(RuntimeException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST) //这里还可以配置响应的状态哦
@ResponseBody
public String catchRuntime() {
return "运行时发生了不可描述的错误偶偶偶偶局";
}
@ExceptionHandler(MyException.class)
public String catchMy(){
return "myError";
}
}
这种方式在本类使用@ControllerAdvice+ @ExceptionHandler的方式实现全局配置,代码解耦合,可以对不同的异常进行单独处理,配置更加灵活,后期的维护和添加异常处理也更加方便。
以上就是极悦小编介绍的"SpringMVC异常处理的三种方式 ",希望对大家有帮助,想了解更多可查看SpringMVC教程。极悦在线学习教程,针对没有任何Java基础的读者学习,让你从入门到精通,主要介绍了一些Java基础的核心知识,让同学们更好更方便的学习和了解Java编程,感兴趣的同学可以关注一下。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习