1.编写要给自定义异常类
public class MyCustomException extends Exception { //定义成员变量: 所有的异常类都具备 private String message;//错误原因 //自定义异常类必须有message带参构造 public MyCustomException(String message) { this.message = message; } @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
2.springmvc管理异常的核心配置类 HandlerExceptionResolver
/** * 自定义全局异常处理器: 实现异常处理器的接口HandlerExceptionResolver * 判断是否是自定义异常 * 如果是,取出自定义异常中错误信息,向用户展示 * 如果不是,给用户一个统一的错误提示: " 非常抱歉,系统出现重大错误,已邮件告知系统管理员处理,请您耐心等待,稍后尝试。" */ public class MyCustomExceptionResolver implements HandlerExceptionResolver { /** * 拦截全局异常的 * @param request 请求对象 * @param response 响应对象 * @param handler 被拦截的处理器Controller的方法 * @param ex 出现了什么异常 */ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { //判断是否是自定义异常 //instanceof 判断当前对象的类型是否是指的类,前提判断对象与该类存在继承关系 MyCustomException myCustomException = null; if (ex instanceof MyCustomException) { //如果是,取出自定义异常中错误信息,向用户展示 myCustomException = (MyCustomException) ex; } else { //向日志文件中,输出异常信息,供开发人员排查解决问题 //ex.printStackTrace(); //如果不是,给用户一个统一的错误提示: myCustomException = new MyCustomException("非常抱歉,系统出现重大错误,已邮件告知系统管理员处理,请您耐心等待,稍后尝试"); } String message = myCustomException.getMessage(); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message", message);//错误原因 modelAndView.setViewName("error");//错误页面视图 return modelAndView; } }
然后将此类注入到spring中
<bean id="myCustomExceptionResolver" class="com.spring.myerror.MyCustomExceptionResolver"></bean>
这个时候抛出的异常就会被SpringMvc管理,自定义抛出页面。