SSM整合之异常处理
来源:互联网 发布:json lib apache 编辑:程序博客网 时间:2024/06/05 23:39
异常处理思路
系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。
系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:
springmvc提供全局异常处理器进行统一的异常处理,一个系统只有一个一个异常处理器
自定义异常类
对不同的异常类型定义异常类,继承Exception。
/** * Created by Alex on 2017/6/29. * 系统自定义异常类 */public class CustomException extends Exception { //异常信息 public String message; public CustomException(String message){ super(message); this.message = message; } @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}
全局异常处理器
思路:
系统遇到异常时,在程序中手动抛出,dao抛给service,service再抛给Controller,最后Controller抛给前端控制器,前端控制器调用全局异常处理器
全局异常处理器处理思路:
解析出异常类型,若该异常类型是系统自定义的异常,直接取出异常信息在错误页面展示即可。
如果不是系统自定义异常,构造一个系统自定义的异常类型,信息为“未知错误”
springmvc提供一个HandlerExceptopnResolver
/** * Created by Alex on 2017/6/29. * 全局异常处理器 */public class CustomExceptionResolver implements HandlerExceptionResolver{ /** * 系统抛出的异常 * @param httpServletRequest * @param httpServletResponse * @param o * @param e 系统抛出的异常 * @return */ @Override public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { // 解析出异常类型 CustomException customException = null; // 若该异常类型是系统自定义的异常,直接取出异常信息在错误页面展示即可。 if(e instanceof CustomException){ customException = (CustomException)e; }else{ // 如果不是系统自定义异常,构造一个系统自定义的异常类型,信息为“未知错误” customException = new CustomException("未知错误"); } //错误信息 String message = customException.getMessage(); ModelAndView modelAndView = new ModelAndView(); //将错误信息传到页面 modelAndView.addObject("message",message); //指向错误页面 modelAndView.setViewName("error"); return modelAndView; }}
错误页面
<%-- Created by IntelliJ IDEA. User: Alex Date: 2017/6/29 Time: 20:06 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>失败!</title></head><body>${message}</body></html>
springmvc.xml中的配置全局异常处理器
<!-- 全局异常处理器 只要类实现了HandlerExceptionResolver接口,就是一个全局异常处理器哦 --> <bean class="com.alex.ssm.exception.CustomExceptionResolver"/>
异常测试
在controller,service,dao中任意一处需要手动抛出异常
如果是程序中手动抛出的异常,在错误页面中会显示自定义的异常信息,若不是手动抛出的异常,说明该异常是一个runtime异常,只显示“未知错误”。
在Controller里手动抛出异常
@RequestMapping(value = "/editItems",method = {RequestMethod.POST,RequestMethod.GET}) //@RequestParam 指定request传入的参数名,即可和形参进行绑定 // 通过required属性指定参数是否必须要传入 public String editItems(Model model, @RequestParam(value = "id",required = true)Integer items_id) throws Exception{ //调用service 根据商品ID查询商品信息 ItemsCustom itemsCustom = itemsService.findItemsById(items_id); //判断商品是否为空,抛出异常 if(itemsCustom == null){ throw new CustomException("修改的商品不存在!"); } //通过形参中的model将model的数据传到页面 //相当于modelandview的addObject model.addAttribute("items",itemsCustom); return "items/editItems"; }
在Service接口中手动抛出异常
@Override public ItemsCustom findItemsById(Integer id) throws Exception { Items items = itemsMapper.selectByPrimaryKey(id); if(items == null){ throw new CustomException("修改的商品不存在!"); } //对于商品信息进行业务处理 //.... //最终返回ItemsCustom ItemsCustom itemsCustom = null; //将items的内容拷贝到itemsCustom if(items != null){ itemsCustom = new ItemsCustom(); BeanUtils.copyProperties(items,itemsCustom); } return itemsCustom; }
如果与业务功能相关的信息,建议在service中抛出异常
与业务功能没有关系的信息,建议在Controller中抛出异常
上面的功能建议在service中抛出异常
阅读全文
0 0
- SSM整合之异常处理
- (菜鸟来动手-第五天)SSM整合之Controller层异常处理
- ssm整合异常
- SSM框架整合异常
- 【异常】SSM整合quartz之org.quartz.impl.JobDetailImpl----ClassNotFoundException
- SSM整合自定义异常处理器
- ssm整合之七 事务以及404页面处理
- SSM整合之配置文件
- SSM之框架整合
- SSM之整合Redis
- 淘淘商城SSM框架之异常处理篇
- SSM之WEB整合SpringMVC
- 整合ssm框架之配置文件
- JavaEE之SSM整合示例
- ssm整合之四 分页
- SSM整合之参数绑定
- SSM整合之数据校验
- SSM整合之分组校验
- UE4 VR项目中actor永远面向头显的蓝图
- 配置opencv+vs2010遇到的最大的一个坑
- PHP 安装启用图形扩展的GD库
- 移动APP的测试流程及方法
- 文章标题
- SSM整合之异常处理
- Postgres进程之间如何协作的?
- 使用eclipse查看源码
- javaweb开发启航
- js验证身份证号
- 数据结构与算法四:归并排序
- ajax异步加载 实现局部刷新
- php利用Imagick把pdf生成png缩略图
- 高铁与普铁的感受