SpringMVC中的异常处理
来源:互联网 发布:北京网络维护公司 编辑:程序博客网 时间:2024/06/17 12:42
1.springmvc中异常处理有三种方式
1)使用spring自带的异常处理器SimpleMappingExceptionResolver
2 ) 自定义全局异常处理器
3)使用@ExceptionHandler注解实现异常处理
本文以登录校验为例来讲解三种异常处理方法的应用
2.使用SimpleMappingExceptionResolver,它实现了HandlerExceptionHandler接口
首先定义自己的异常
public class LibraryException extends Exception { public String message; public LibraryException(){} public LibraryException(String message){ this.message=message; } @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}在logincontroller中会抛出自定义的异常
@RequestMapping(value="/login",method=RequestMethod.POST) public String login(HttpServletRequest request,HttpServletResponse response, String username, String password,String captcha, @RequestParam(value="rememberme",defaultValue="0") int rememberme) throws Exception { if(!validateUtils.validate(request,response,captcha)){ throw new LibraryException("验证码输入不正确!"); } return "redirect:list-books"; }在springmvc的配置文件中需要配置该异常处理器
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 定义默认的异常处理页面 --> <property name="defaultErrorView" value="/WEB-INF/views/error.jsp"/> <!-- 定义异常处理页面用来获取异常信息的变量名,也可不定义,默认名为exception --> <property name="exceptionAttribute" value="exception"/> <!-- 定义需要特殊处理的异常,可以是自定义的异常(记得配置为bean)--> <property name="exceptionMappings"> <props> <prop key="com.lpq.personallibrary.util.exceptionutils.LibraryException"> library_error</prop> </props> </property> </bean>
3.自定义全局异常处理器1)跟上面一样定义LibraryException异常,在controller中抛出异常;2)自定义全局异常处理器MyHandlerExceptionResolver来实现HandlerExceptionResolver接口首先,判断异常的类型是否是自定义的异常,如果是则转换成自定义异常,如果不是实例化一个自定义的异常(信息为“系统未定义异常!”);3)定义ModelAndView,添加异常信息和错误页面的名称
public class MyExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { LibraryException le=null; if(ex instanceof LibraryException){ le=(LibraryException)ex; }else{ le=new LibraryException("系统未知异常!"); } ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("exception",le.getMessage()); modelAndView.getModel().put("exception",le.getMessage()); modelAndView.setViewName("error"); return modelAndView; }}
jsp页面中error.jsp可以获取其中的异常信息
%@ page contentType="text/html;charset=UTF-8" language="java"%><html><head> <title>Title</title></head><body>错误页面!2${requestScope.exception}${exception}</body></html>
4.基于@ExceptionController 和 @ControllerAdvice的注解
这种方法比较简单,不需要进行配置,如果没有@ControllerAdvice注解,则@ExceptionHanler注解需要和contoller在同一个类中
- @ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度,需要指明需要处理的异常类型
- @ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离
package com.lpq.personallibrary.util.exceptionutils;import org.springframework.stereotype.Component;@Componentpublic class LibraryException extends Exception { public String message; public LibraryException(){} public LibraryException(String message){ this.message=message; } @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}
然后,定义异常处理类
在controller中抛出的异常都能得到相应的处理package com.lpq.personallibrary.util.exceptionutils;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.servlet.ModelAndView;@ControllerAdvicepublic class ExceptionHandler { //该注释指明LibraryException在此方法中进行处理 @org.springframework.web.bind.annotation.ExceptionHandler(LibraryException.class) public ModelAndView libraryExceptionHandler(LibraryException ex){ ModelAndView modelAndView=new ModelAndView(); modelAndView.getModel().put("exception",ex); modelAndView.setViewName("library_error"); return modelAndView; } //注解中指明Exception.class,所以前面未能匹配的异常进入此方法进行处理 @org.springframework.web.bind.annotation.ExceptionHandler(Exception.class) public ModelAndView allExceptionHanlder(Exception ex){ ModelAndView modelAndView=new ModelAndView(); modelAndView.getModel().put("exception",ex); modelAndView.setViewName("error"); return modelAndView; }}@RequestMapping(value="/login",method=RequestMethod.POST) public String login(HttpServletRequest request,HttpServletResponse response, String username, String password,String captcha, @RequestParam(value="rememberme",defaultValue="0") int rememberme) throws Exception { if(!validateUtils.validate(request,response,captcha)){ throw new LibraryException("验证码输入不正确!"); //throw new RuntimeException("运行时异常"); } return "redirect:list-books"; }
阅读全文
0 0
- SpringMVC中的异常处理
- SpringMVC中的异常处理
- SpringMVC中的异常处理
- SpringMVC 中的异常处理
- SpringMVC中的异常处理
- SpringMVC中的异常处理
- SpringMVC中的异常处理
- SpringMVC中的统一异常处理
- SpringMvc中的异常处理ExceptionHandlerExceptionResolver的使用
- Springmvc异常处理【Springmvc】
- 【SpringMVC学习07】SpringMVC中的统一异常处理
- 【SpringMVC学习07】SpringMVC中的统一异常处理
- springMVC异常处理
- springmvc 异常处理
- springMVC 全局异常处理
- springMVC之异常处理
- SpringMVC的异常处理
- SpringMVC异常处理
- 4356: 情人节的阻击(两种情况)
- Nginx之日志管理配置-yellowcong
- 微信小程序小结
- 新的开始
- JavaScript基础(2)——JavaScript的数据类型
- SpringMVC中的异常处理
- 学习安排流程
- E2. 比昨天更多的棒棒糖 (Hard)
- 小学生都在学Python
- 文章标题
- mysql:初识数据库
- Algorithm之路七:Reverse Integer
- JDK不同操作系统的FileSystem(unix-like)下篇
- 学习记录:ES6-module