zoukankan      html  css  js  c++  java
  • SpringMVC的异常处理

    一、异常分类

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

    二、SpringMVC异常处理方式

    系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理。
    springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。

    三、自定义异常处理

    1、自定义异常类

    对不同的异常类型定义异常类,继承Exception。

    public class ItemsException extends Exception {
    
        private String message;//异常信息
        //构造方法
        public ItemsException(String message){
            this.message = message;
        }
    
        @Override
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    }
    

    2、全局的异常处理器

    (1)处理方式:系统遇到异常,在程序中手动抛出,dao抛给service、service给controller、controller抛给前端控制器,前端控制器调用全局异常处理器。
    (2)全局异常处理器处理思路:
     解析出异常类型,如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示,如果该异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)
    (3)springmvc提供一个HandlerExceptionResolver接口.

    public class MyException implements HandlerExceptionResolver{
        @Override
        public ModelAndView resolveException(HttpServletRequest httpServletRequest,
                                             HttpServletResponse httpServletResponse, Object o, Exception e) {
    
            ItemsException itemsException = null;
            //解析出异常类型
            //如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示
            if(e instanceof ItemsException){
                itemsException =(ItemsException) e;
            }else{
                //如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)
                itemsException = new ItemsException("未知错误");
            }
            //获取异常信息
            String message = itemsException.getMessage();
            //将异常信息添加到ModelAndView
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("message",message);
            //将view添加到modelAndView
            modelAndView.setViewName("error");
            return modelAndView;
        }
    }
    

    3、编写错误页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"%>
    <html>
        <head>
            <title>自定义异常</title>
        </head>
        <body>
            ${message}
        </body>
    </html>
    

    4、在SpringMVC的配置文件中配置全局异常处理器

    <bean class="com.jack.Exception.MyException"/>
    

    5、异常测试

    controller异常:

       public ModelAndView queryItemById(@RequestParam(value = "id") Integer item_id) throws Exception{
    
            ItemsCustom itemsExtend = itemsService.queryItesmById(item_id);
            if(itemsExtend == null){
               throw  new ItemsException("商品信息不存在");
            }
                ModelAndView modelAndView = new ModelAndView();
                modelAndView.addObject("itemsExtend",itemsExtend);
                modelAndView.setViewName("updateitem");
                return modelAndView;
        }
    

    service异常:

     @Override
        public ItemsCustom queryItesmById(Integer id) throws Exception {
            ItemsCustom itemsCustom= itemsMapper.queryItesmById(id);
            if(itemsCustom == null){
                new ItemsException("商品信息不存在");
            }
            return itemsCustom;
        }
    

    6、测试结果

  • 相关阅读:
    [转]简单理解php的socket编程
    github 生成token的方法
    win7升级powershell【转】
    PHP的反射机制 【转】
    jquery幻灯片插件slick演示
    织梦生成的时候“你指定的文件名有问题,无法创建文件”解决方案【转】
    dedecms下的tplcache模板缓存[转]
    dede织梦data目录正确迁移及引起的问题解决方法【转】
    C# 判断是否是在设计模式下有效的方法
    C# 操作计算机用户权限
  • 原文地址:https://www.cnblogs.com/jack1995/p/7357609.html
Copyright © 2011-2022 走看看