专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 SpringMVC异常处理的三种方式

SpringMVC异常处理的三种方式

更新时间:2021-09-10 10:20:46 来源:动力节点 浏览1049次

1.使用 @ExceptionHandler 注解

该方式进行异常处理的方法必须与出错的方法在同一个Controller里面。使用如下:

// 这个异常处理只会在本类中起作用
@ExceptionHandler(RuntimeException.class)
public String catchException(RuntimeException e){
System.out.println(e.getMessage());
return "error";
}

这种异常处理可以根据不同的异常在同一个Controller中配置多个,但是它们只能在该Controller中起作用。

2.实现 HandlerExceptionResolver 接口

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");
}

这种方式也可以进行异常处理,而且是全局。但是这种方式也有一定的弊端,全部的处理都打在一个方法里面,没有解耦合,后期不利于我们维护。

3.使用 @ControllerAdvice+ @ ExceptionHandler 注解

为了结合上面俩种方式的优点,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编程,感兴趣的同学可以关注一下。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>