springMVC异常和处理
2016-10-22 22:23
225 查看
HandlerExceptionResolver
@ExceptionHandler作用范围是在当前类
@ControllerAdvice 是全局异常捕获
DispatcherServlet 默认装配的 HandlerExceptionResolver主要处理 Handler 中用 @ExceptionHandler 注解定义的方法。
@ExceptionHandler 注解定义的方法优先级问题:先精确查找,再找其他的
ExceptionHandlerMethodResolver 内部若找不到@ExceptionHandler 注解的话,会找
@ControllerAdvice 中的@ExceptionHandler 注解方法
HandlerExceptionResolver 代码片段
handler 类中// @ExceptionHandler({RuntimeException.class}) // public ModelAndView handleArithmeticException2(Exception ex){ // System.out.println("[出异常了]: " + ex); // ModelAndView mv = new ModelAndView("error"); // mv.addObject("exception", ex); // return mv; // } /** * 1. 在 @ExceptionHandler 方法的入参中可以加入 Exception 类型的参数, 该参数即对应发生的异常对象 * 2. @ExceptionHandler 方法的入参中不能传入 Map. 若希望把异常信息传导页面上, 需要使用 ModelAndView 作为返回值 * 3. @ExceptionHandler 方法标记的异常有优先级的问题. * 4. @ControllerAdvice: 如果在当前 Handler 中找不到 @ExceptionHandler 方法来出来当前方法出现的异常, * 则将去 @ControllerAdvice 标记的类中查找 @ExceptionHandler 标记的方法来处理异常. */ // @ExceptionHandler({ArithmeticException.class}) // public ModelAndView handleArithmeticException(Exception ex){ // System.out.println("出异常了: " + ex); // ModelAndView mv = new ModelAndView("error"); // mv.addObject("exception", ex); // return mv; // }
@ControllerAdvice 修饰的类中
@ControllerAdvice public class SpringMVCTestExceptionHandler { @ExceptionHandler({ArithmeticException.class}) public ModelAndView handleArithmeticException(Exception ex){ System.out.println("----> 出异常了: " + ex); ModelAndView mv = new ModelAndView("error"); mv.addObject("exception", ex); return mv; } }
ResponseStatusExceptionResolver 捕获异常
两种方式修饰 一种是方法上 另一种是 修饰一个异常类 在异常及异常父类中找到 @ResponseStatus 注解,然后使用这个注解的属性进行处理。区别在于,只有修饰类是,方法跑出异常,过程不会走完.而修饰方法是,无论如何都会跑出异常,且走完方法
相关代码
修饰类//value=HttpStatus.FORBIDDEN 指定错误编号| reason 指定显示内容 @ResponseStatus(value=HttpStatus.FORBIDDEN, reason="用户名和密码不匹配!") public class UserNameNotMatchPasswordException extends RuntimeException{ /** * */ private static final long serialVersionUID = 1L; }
修饰方法
//都会跑出异常 |且当前方法走完 @ResponseStatus(reason="测试",value=HttpStatus.NOT_FOUND) @RequestMapping("/testResponseStatusExceptionResolver") public String testResponseStatusExceptionResolver(@RequestParam("i") int i){ if(i == 13){ throw new UserNameNotMatchPasswordException(); } System.out.println("testResponseStatusExceptionResolver..."); return "success"; }
DefaultHandlerExceptionResolver 默认处理器
对一些特殊的异常进行处理,比如NoSuchRequestHandlingMethodException、HttpReques
tMethodNotSupportedException、HttpMediaTypeNotSuppo
rtedException、HttpMediaTypeNotAcceptableException
等。
SimpleMappingExceptionResolver
如果希望对所有异常进行统一处理,可以使用SimpleMappingExceptionResolver,它将异常类名映射为视图名,即发生异常时使用对应的视图报告异常
<!-- 配置使用 SimpleMappingExceptionResolver 来映射异常 --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionAttribute" value="ex"></property> <property name="exceptionMappings"> <props> <prop key="java.lang.ArrayIndexOutOfBoundsException">error</prop> </props> </property> </bean>
相关文章推荐
- springMVc对异常的处理
- SpringMVC对异常进行全局处理,并区分对待ajax和普通请求
- springmvc 统一处理异常机制
- SpringMVC 常见异常处理
- springMVC实现全局异常处理
- 使用springMVC进行统一的异常处理
- SpringMVC全局异常处理
- SpringMvc的异常处理
- SpringMVC异常处理流程
- SpringMVC 异常处理
- 不错的对springmvc 异常处理
- 我在项目中Springmvc处理异常并记录日志(一) ps:如何有更好的方法,请写到评论中多多交流,谢谢!
- springMvc、Spring项目异常处理和Log4j的配置(转)
- springmvc异常统一处理
- SpringMVC利用注解实现异常处理
- springMVC全局的异常处理
- SpringMVC控制台打印异常 异常处理
- SpringMVC统一异常处理简单配置
- SpringMVC 统一异常处理入口
- SpringMVC 异常处理