SSM之全局异常处理器
1. 异常处理思路
首先来看一下在springmvc中,异常处理的思路:
如上图所示,系统的dao、service、controller出现异常都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理。springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。明白了springmvc中的异常处理机制,下面就开始分析springmvc中的异常处理。
2. 定义全局异常处理器
1、定义自定义异常类,继承Exception
public class CustomException extends Exception { public String message; public Throwable throwable; public CustomException(String message){ super(message); this.message = message; } public CustomException(Throwable throwable){ super(throwable); this.throwable = throwable; } public Throwable getThrowable() { return throwable; } public void setThrowable(Throwable throwable) { this.throwable = throwable; } @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
2、定义异常处理器
public class CustomExceptionResolver implements HandlerExceptionResolver { public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { // 解析出异常类型 CustomException customException = null; String message = ""; // 若该异常类型是系统自定义的异常,直接取出异常信息在错误页面展示即可。 if(e instanceof CustomException){ customException = (CustomException)e; customException.getThrowable().getClass().getName(); }else{ // 如果不是系统自定义异常,构造一个系统自定义的异常类型,信息为“未知错误” customException = new CustomException("未知错误"); message = customException.getMessage(); } //错误信息 ModelAndView modelAndView = new ModelAndView(); //将错误信息传到页面 modelAndView.addObject("message",message); //指向错误页面 modelAndView.setViewName("showError"); return modelAndView; } }
3、SpringMVC中配置全局异常处理器
<bean class="com.smart.exception.CustomExceptionResolver"/>
4、测试
@RequestMapping(value="") @ResponseBody public Map<String,Object> Register(User user) throws Exception{ Map<String,Object> map = new HashMap<String,Object>(); try{ boolean isSuccess = userService.Register(user); if(isSuccess){ map.put("tip", "success"); } else{ map.put("tip", "error"); } }catch (Exception e){ throw new CustomException("未知错误"); } return map; }