• Spring MVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射、数据绑定以及目标方法执行时发生的异常。
  • SpringMVC 提供的 HandlerExceptionResolver 的实现类

<mvc:annotation-driven/>在容器中注册org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver

ExceptionHandlerExceptionResolver

  • 主要处理 Handler 中用 @ExceptionHandler 注解定义的方法。
package com.nchu.mybatis.controller;
/**
* Created by yangshijing on 2017/12/26 0026.
*/
//@SessionAttributes(value={"user"}, types={String.class})
@RequestMapping("/test")
@Controller
public class SpringMVCTest {
private static final String SUCCESS = "success";
@RequestMapping("/testHandlerExceptionResolver")
public String testHandlerExceptionResolver(@RequestParam("i") int i){
int a = 10/i;
return SUCCESS;
}
/**
* 测试SpringMVC对异常的处理
* 1. 在 @ExceptionHandler 方法的入参中可以加入 Exception 类型的参数, 该参数即对应发生的异常对象
* 2. @ExceptionHandler 方法的入参中不能传入 Map. 若希望把异常信息传导页面上,
   * 需要使用 ModelAndView 作为返回值
* 3. @ExceptionHandler 方法标记的异常有优先级的问题.
* 4. @ControllerAdvice: 如果在当前 Handler 中找不到 @ExceptionHandler
   * 方法来处理当前方法出现的异常,则将去 @ControllerAdvice 标记的类中查找
   * @ExceptionHandler 标记的方法来处理异常.
*/
@ExceptionHandler({RuntimeException.class})
public ModelAndView testException(Exception ex){
ModelAndView modelAndView = new ModelAndView("error");
modelAndView.addObject("exception", ex);
return modelAndView;
}
}
  • @ExceptionHandler 注解定义的方法优先级问题:例如发生的是NullPointerException,但是声明的异常有RuntimeException 和 Exception,此候会根据异常的最近继承关系找到继承深度最浅的那个 @ExceptionHandler注解方法,即标记了 RuntimeException 的方法
  • ExceptionHandlerMethodResolver 内部若找不到@ExceptionHandler 注解的话,会找@ControllerAdvice 中的@ExceptionHandler 注解方法
package com.nchu.mybatis.controller;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView; /**
* Created by yangshijing on 2018/1/7 0007.
* 自定义异常处理类,会对全局声明的异常进行处理
*/
@ControllerAdvice
public class NchuException {
@ExceptionHandler({ArithmeticException.class})
public ModelAndView testException(Exception ex){
ModelAndView modelAndView = new ModelAndView("error");
modelAndView.addObject("exception", ex);
System.out.print("12344");
return modelAndView;
}
}

最新文章

  1. C++实现vector
  2. spring实现一对多表单的保存
  3. Git下载Spring项目源码并编译为Eclipse
  4. npoi实现 从固定的行读取数据作为表头并返回datable
  5. 基于Microsoft Azure、ASP.NET Core和Docker的博客系统
  6. Objective-C(NSString、BOOL、多文件开发)
  7. 20条IPTables防火墙规则用法!
  8. hadoop vs spark
  9. Dom4j解析Xml文件,Dom4j创建Xml文件
  10. cocos2d-x 找不到资源文件问题
  11. 在cnblog中使用syntax方法
  12. C# 字段、属性、成员变量
  13. 修改sqlserver的数据库排序规则语句
  14. vue 全局插槽 全局插座
  15. [Apio2012]dispatching 左偏树
  16. 30天代码day0
  17. Confluence 6 通过 SSL 或 HTTPS 运行 - 创建或请求一个 SSL 证书
  18. React-简书视频学习总结
  19. Dll注入经典方法完整版
  20. 【Tomcat】Tomcat安装及Eclipse配置教程

热门文章

  1. 监听Documents文件夹内文件发生改变
  2. C#结构体数组间的转化
  3. python 函数 hex()
  4. wordpress改不了固定连接的解决办法
  5. 第12篇 PSR-1规范
  6. lnmp centos7 memcache服务器端 和 memcache memcached扩展的安装
  7. lua语法基本
  8. (转)WebApi发送HTML表单数据:文件上传与多部分MIME
  9. java动态画圈圈。运用多线程,绘图
  10. 1060 Are They Equal