SpringMVC对异常处理的两种方式
1.@ControllerAdvice注解
使用方法:
一般使用该注解都是基于JSON数据返回的,所以在类上增加@RestController
注解,并且在加上@ControllerAdvice
注解表明这个类是一个统一异常处理类即可。
@RestController
@ControllerAdvice
public class QuanException {
}
对于方法,可以使用每个方法处理不同的异常只需要在方法上使用@ExceptionHandler()
注解即可,中间填写要处理的异常。也可以都用一个方法处理,在这个方法对异常进行判断。不过这样就失去了解耦的意义,使代码更加冗余,不利于维护。所以一般选择前者。
核心代码:
@RestController
@ControllerAdvice
public class QuanException {
@ExceptionHandler(Exception.class)
public String returnError(Exception e) {
e.printStackTrace();
return "ControllerAdvice";
}
}
举例:
抛出异常的controller
@RestController
public class UserController {
@RequestMapping("hello")
public String save(){
System.out.println("abc");
int a = 1/0;
return "success";
}
}
页面效果:
2.HandlerExceptionResolver接口
使用方法:
实现HandlerExceptionResolver
接口,并实现其抽象方法。不过是返回的ModelAndView 对象,可以用各种模板引擎对数据和页面进行渲染展示。一般是统一一个error.jsp
页面,用EL表达式去将要展示的错误信息渲染出来即可,这个jsp页面可以一直通用
核心代码:
@Component
public class MVCException implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
return modelAndView;
}
}
在将该类加入到IOC容器中也可以选择使用XML的方法,这里以注解的方式进行展示,大家也可以试试使用<bean>
标签。
效果展示:
如果在一个项目中,即使用了@ControllerAdvice
又使用了HandlerExceptionResolver
接口,那么会以@ControllerAdvice
为主;大家可以自行尝试一下。
3.针对404错误的管理
针对404页面可以避免非正常页面展示给用户,给用户一个良好的体验。对于SpringMVC来说,只需在web.xml
文件中增加以下配置即可:
<!-- 404 页面不存在错误 -->
<error-page>
<error-code>404</error-code>
<!--指定开发者规定要跳转到的404页面-->
<location>/WEB-INF/error_web_404.jsp</location>
</error-page>
小结:
异常处理可以说大大提高了用户页面信息的体验,避免了展示系统跳出的4XX和5XX的页面。所以善用异常处理可以增加用户体验的感觉。