SpringMVC统一异常处理实例代码
一、需求
- 一般项目中都需要作异常处理,基于系统架构的设计考虑,使用统一的异常处理方法。
- 系统中异常类型有哪些?
- 包括预期可能发生的异常、运行时异常(RuntimeException),运行时异常不是预期会发生的。
- 针对预期可能发生的异常,在代码手动处理异常可以try/catch捕获,可以向上抛出。
- 针对运行时异常,只能通过规范代码质量、在系统测试时详细测试等排除运行时异常。
二、统一异常处理解决方案
2.1定义异常
针对预期可能发生的异常,定义很多异常类型,这些异常类型通常继承于Exception。
这里定义一个系统自定义异常类:
CustomException,用于测试。
publicclassCustomExceptionextendsException{ //异常信息 privateStringmessage; publicCustomException(Stringmessage){ super(message); this.message=message; } publicStringgetMessage(){ returnmessage; } publicvoidsetMessage(Stringmessage){ this.message=message; } }
2.2异常处理
要在一个统一异常处理的类中要处理系统抛出的所有异常,根据异常类型来处理。
统一异常处理的类是什么?
前端控制器DispatcherServlet在进行HandlerMapping、调用HandlerAdapter执行Handler过程中,如果遇到异常,进行异常处理。
在系统中自定义统一的异常处理器,写系统自己的异常处理代码。
统一异常处理器实现HandlerExceptionResolver接口。
publicclassCustomExceptionResolverimplementsHandlerExceptionResolver{ //前端控制器DispatcherServlet在进行HandlerMapping、调用HandlerAdapter执行Handler过程中,如果遇到异常就会执行此方法 //handler最终要执行的Handler,它的真实身份是HandlerMethod //Exceptionex就是接收到异常信息 @Override publicModelAndViewresolveException(HttpServletRequestrequest, HttpServletResponseresponse,Objecthandler,Exceptionex){ //输出异常 ex.printStackTrace(); //统一异常处理代码 //针对系统自定义的CustomException异常,就可以直接从异常类中获取异常信息,将异常处理在错误页面展示 //异常信息 Stringmessage=null; CustomExceptioncustomException=null; //如果ex是系统自定义的异常,直接取出异常信息 if(exinstanceofCustomException){ customException=(CustomException)ex; }else{ //针对非CustomException异常,对这类重新构造成一个CustomException,异常信息为“未知错误” customException=newCustomException("未知错误"); } //错误信息 message=customException.getMessage(); request.setAttribute("message",message); try{ //转向到错误页面 request.getRequestDispatcher("/WEB-INF/jsp/error.jsp").forward(request,response); }catch(ServletExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnnewModelAndView(); } }
2.3配置统一异常处理器
2.4异常处理逻辑
- 根据不同的异常类型进行异常处理。
- 系统自定义的异常类是CustomException,在controller方法中、service方法中手动抛出此类异常。
- 针对系统自定义的CustomException异常,就可以直接从异常类中获取异常信息,将异常处理在错误页面展示。
- 针对非CustomException异常,对这类重新构造成一个CustomException,异常信息为“未知错误”,此类错误需要在系统测试阶段去排除。
- 在统一异常处理器CustomExceptionResolver中实现上边的逻辑。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。