springmvc处理异常有三种方式: 1.在一个controller中定义一个方法,用@ExceptionHandler注解标注。(优先级最高)

@ExceptionHandler

public ModelAndView handleException(Exception exception){
    ModelAndView mv = new ModelAndView("error/500");
    mv.addObject("ex",exception);
    return mv;

}

@ExceptionHandler
public String handleException(Exception exception){
    return "error/500";
}

2.全局异常设置(下载地址 优先级次之)

<!-- 将Controller抛出的异常转到特定View,异常映射处理器 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception -->
    <!--<property name="exceptionAttribute" value="ex"></property>-->
    <property name="exceptionMappings">
        <props>
            <prop key="java.lang.Throwable">error/500</prop>
        </props>
    </property>
</bean>

3.自定义异常处理(下载地址 优先级次之)

public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    System.out.println("自定义异常处理器");
    logger = LoggerFactory.getLogger(ex.getClass());
    ResponseStatus responseStatus = AnnotationUtils.getAnnotation(ex.getClass(), ResponseStatus.class);
    ModelAndView modelAndView = new ModelAndView("error/500");
    //自定义的异常
    if (responseStatus != null) {
        modelAndView.setViewName("error/" + responseStatus.value().value());
    } else {
        //其他异常,做一些其他的处理,如发送错误报警邮件,记录日志
        logger.error(ex.getMessage(), ex);
    }
    return modelAndView;
}

4.自定义一个异常类,继承RunTimeException(优先级最低)

@ResponseStatus(value = HttpStatus.NOT_FOUND,reason = "No such resource")
public class NotFoundException extends RuntimeException {
 
}

当抛出我们自定义的异常时,就会构造出相应的状态码,一般我们还是设置SimpleMappingExceptionResolver,来进行统一跳转到错误页面。
最佳实践:还是用全局的SimpleMappingExceptionResolver最好,在jsp里面写日志,当需要进行细粒度的控制时,还是自定义异常解析器为好,其他的自我感觉不好用!如有不正确的,欢迎指正! ​

最新文章

  1. 两种方式实现java生成Excel
  2. Why AlloyFinger is so much smaller than hammerjs?
  3. Linux系统程序的运行级别
  4. PhotoShop常用快捷键
  5. PLSQL查询表是否被锁定(转)
  6. jQuery File Upload跨域上传
  7. HD 1003 Max Sum 的递归解法
  8. 半平面交模板(O(n*n)&amp;&amp; O(n*log(n))
  9. python操作postgresql数据库
  10. c语言数据结构:01背包问题-------动态规划
  11. Codevs 1010 过河卒
  12. openerp学习笔记 domain 增加扩展支持,例如支持 &lt;field name=&quot;domain&quot;&gt;[(&#39;type&#39;,&#39;=&#39;,&#39;get_user_ht_type()&#39;)]&lt;/field&gt;
  13. 如何进行Hadoop二次开发指导视频下载
  14. 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
  15. Uploadify 笔记分享 -- 2014年10月18日
  16. Quartz中文文档使用
  17. Swift 2.2 协议和代理
  18. Thread in Java
  19. day1 安装jdk8环境及第一个java程序
  20. [USACO07NOV]牛继电器Cow Relays

热门文章

  1. LeetCode - 415. Add Strings
  2. 如何用easyui+JAVA 实现动态拼凑datagrid表格
  3. Java中的访问控制权限
  4. 一步一步开发Game服务器(三)加载脚本和服务器热更新(二)完整版
  5. “全能”选手—Django 1.10文档中文版Part4
  6. iOS中获取cell中webview的内容尺寸
  7. Nancy之区域和分部视图的使用
  8. securityPolicy与安全策略等级配置
  9. 初识UML类图--类之间关系
  10. Javaweb学习笔记——上传下载文件