springMVC异常处理(自定义异常)HandlerExceptionResolver
注:本篇的异常主要指的是controller、service和dao层中执行方法抛出的异常。
一、为什么要处理异常?
因为如果我们不处理异常,异常信息就会直接抛出给浏览器,于是浏览器页面就直接显示异常信息,这对用户来说是很不友好的。我们应该在发生错误时返回一个友好的错误提示页面展示给用户。
二,异常处理思路
当dao或者其他层抛出异常时,异常会向上逐层抛出,最后抛出到浏览器。那么我们就可以在异常抛出到前端控制器(DispatcherServlet)的时候,编写异常处理器对异常进行拦截,经过异常处理器处理异常后,跳转到一个友好的错误提示页面并返回给浏览器
三、实现步骤
1.编写自定义异常类
public class SysException extends Exception { private String message; public SysException(String message) { this.message = message; } @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
2.编写异常处理器类
public class SysExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) { SysException e = null; if (ex instanceof SysException){ e = (SysException) ex; }else { e = new SysException("系统正在维护"); } ModelAndView mv = new ModelAndView(); mv.addObject("errorMsg",ex.getMessage()); mv.setViewName("error"); return mv; } }
注意:异常处理器类必须实现HandlerExceptionResolver接口,并实现接口中的方法
3.配置异常处理器(将异常处理器交给spring容器管理)
方式一:用xml配置的方式
在springmvc.xml配置文件中加如bean标签,将刚刚编写的异常处理器类交给spring容器管理。
<bean id="sysExceptionResolver" class="com.xj.exception.SysExceptionResolver"/>
方式二:使用注解
在刚刚编写的异常处理器类上加上Component注解
例如:
@Component public class SysExceptionResolver implements HandlerExceptionResolver { }
这样就配置好了。