异常处理器

springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。

1.1 异常处理思路

系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:

1.2 自定义异常类

为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。

 public class CustomException extends Exception {/** serialVersionUID*/private static final long serialVersionUID = -5212079010855161498L;public CustomException(String message){super(message);this.message = message;}//异常信息private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}

1.3 自定义异常处理器

public class CustomExceptionResolver implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) {ex.printStackTrace();CustomException customException = null;//如果抛出的是系统自定义异常则直接转换if(ex instanceof CustomException){customException = (CustomException)ex;}else{//如果抛出的不是系统自定义异常则重新构造一个未知错误异常。customException = new CustomException("未知错误,请与系统管理 员联系!");}ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("message", customException.getMessage());modelAndView.setViewName("error");return modelAndView;}}

1.4 错误页面

 <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>错误页面</title></head><body>您的操作出现错误如下:<br/>${message }</body></html>

1.5 异常处理器配置

在springmvc.xml中添加:

<!-- 异常处理器 --><bean id="handlerExceptionResolver" class="com.sihai.ssm.controller.exceptionResolver.CustomExceptionResolver"/>

1.6 异常测试

修改商品信息,id输入错误提示商品信息不存在。

修改controller方法“editItem”,调用service查询商品信息,如果商品信息为空则抛出异常:

// 调用service查询商品信息Items item = itemService.findItemById(id);if(item == null){throw new CustomException("商品信息不存在!");}

请自行实现在service、dao中跑出异常。

SpringMVC教程--异常处理器详解相关推荐

  1. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

    在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...

  2. springMVC教程--拦截器详解

    3 拦截器 3.1 定义 Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理. 3.2 拦截器定义 实现HandlerInte ...

  3. SpringMVC教程--json使用详解

    json数据交互 1.1 @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将 ...

  4. springmvc教程--RESTful支持详解

    RESTful支持 1.1 需求 RESTful方式商品修改.商品查询. 1.2 添加DispatcherServlet的rest配置 <servlet><servlet-name& ...

  5. crashdumpandroid_Android 中Crash时如何获取异常信息详解及实例

    Android 中Crash时如何获取异常信息详解 前言: 大家都知道,Android应用不可避免的会发生crash,无论你的程序写的多完美,总是无法完全避免crash的发生,可能是由于Android ...

  6. SpringMVC 之类型转换Converter详解转载

    SpringMVC之类型转换Converter详解 本文转载 http://www.tuicool.com/articles/uUjaum 1.1     目录 1.1      目录 1.2     ...

  7. 【Linux】Ubuntu 20.04安装教程(图文详解)

    Ubuntu 20.04安装教程(图文详解) 准备工作 打开 VWMARE 进行安装配置 虚拟机已经配置完毕后的 Ubuntu20.0.4 安装 安装VMware Tools 准备工作 下载 Ubun ...

  8. java异常体系结构详解

    java异常体系结构详解 参考文章: (1)java异常体系结构详解 (2)https://www.cnblogs.com/hainange/p/6334042.html 备忘一下.

  9. python语言入门详解-python初级教程:入门详解

    python初级教程:入门详解 Crifan Li 目录 前言 .................................................................... ...

最新文章

  1. 自动延时跳转到指定页面JS脚本代码
  2. 单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等(转)
  3. java如何读取word的占位符_java利用xml导出word(占位符替换)
  4. Facebook将在印度测试联网无人机,可连续飞行90天
  5. linux五周第三次课(3月7日)笔记
  6. 1小时学会jenkins集成邮件/微信/钉钉通知
  7. vsftpd配置系统用户为登陆用户
  8. 2019年全国大学生电子设计竞赛G题解决方案-双路语音同传的无线收发系统
  9. 【京东】scrapy爬虫抓取京东图书详情、评论
  10. Zigbee协议网络相关的东西(1)
  11. #2014蓝桥杯-4.史丰收速算--------根本看不懂
  12. ospf配置小实验及安全认证
  13. 从五个方面来讲一下平面设计颜色搭配知识——黎乙丙
  14. e4a php上传,POST上传文件(E4A)
  15. Zerg 族历史简介
  16. vue中click无效问题
  17. 「GitLab篇」如何用Git平台账号登录建木CI
  18. 【Python】批量替换word文档内容python-docx的实现
  19. 交叉编译工具链建立与常识
  20. [置顶]Blender 三维绘图及渲染软件 (开源优秀强大跨平台)

热门文章

  1. Github代码上传和下载
  2. 自然语言处理库——TextBlob
  3. 在MyEclipse中导入做好的java项目出现错误The project cannot be built until build path errors are resolved
  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型
  5. Hyperledger Fabric 智能合约实战 (3) 安装fabric
  6. nginx.conf配置文件
  7. 2-Authentication Framework Chain of Trust
  8. 后台服务显示右下角弹窗 -- system权限创建用户权限进程
  9. 实现远程调用_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP
  10. Intel VT学习笔记(七)—— EPT物理地址转换