zoukankan      html  css  js  c++  java
  • springmvc自定义异常处理器

    6b450c3c818f46f2be772ec024d3e4f8

    当dispatchServlet接收到controller抛出的异常时,会将异常交由 HandlerExceptionResolver

    异常处理器处理!我们可以创建自定义异常处理器实现该接口来处理自定义异常

    1) 自定义异常类

    public class MyException extends Exception {
        // 异常信息
        private String message;
     
        public MyException() {
           super();
        }
     
        public MyException(String message) {
           super();
           this.message = message;
        }
     
        public String getMessage() {
           return message;
        }
     
        public void setMessage(String message) {
           this.message = message;
        }
     
    }

    2)自定义异常处理器

    public class CustomHandleException implements HandlerExceptionResolver {
     
        @Override
       public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
               Exception exception) {
           // 定义异常信息
           String msg;
     
           // 判断异常类型
           if (exception instanceof MyException) {
               // 如果是自定义异常,读取异常信息
               msg = exception.getMessage();
           } else {
               // 如果是运行时异常,则取错误堆栈,从堆栈中获取异常信息
               Writer out = new StringWriter();
               PrintWriter s = new PrintWriter(out);
               exception.printStackTrace(s);
               msg = out.toString();
     
           }
     
           // 把错误信息发给相关人员,邮件,短信等方式
           // TODO
     
           // 返回错误页面,给用户友好页面显示错误信息
           ModelAndView modelAndView = new ModelAndView();
           modelAndView.addObject("msg", msg);
           modelAndView.setViewName("error");
     
           return modelAndView;
        }
    }

    3)在springmvc.xml中配置异常处理器

    <!-- 配置全局异常处理器 -->
    <bean
    id="customHandleException" class="cn.itcast.ssm.exception.CustomHandleException"/>

    4)定制错误页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>Insert title here</title>
    </head>
    <body>
     
        <h1>系统发生异常了!</h1>
        <br />
        <h1>异常信息</h1>
        <br />
        <h2>${msg }</h2>
     
    </body>
    </html>

    5)测试异常处理

    @RequestMapping(value = "/item/itemlist.action")
    public ModelAndView itemList() throws MyException{
            
            List<Items> list = itemService.selectItemsList();
            
            if(true){
                throw new MyException("商品列表不能为空!!");
            }
            
            ModelAndView mav = new ModelAndView();
            mav.addObject("itemList", list);
            mav.setViewName("itemList");
            return mav;
        }

    9a4c08a5bf624c50bce967b981607779

  • 相关阅读:
    蝶恋花
    JVM解毒——JVM与Java体系结构
    超赞!IDEA 最新版本,支持免打扰和轻量模式!
    SpringBoot 结合 Spring Cache 操作 Redis 实现数据缓存
    神奇的 SQL 之 WHERE 条件的提取与应用
    终于放弃了单调的swagger-ui了,选择了这款神器—knife4j
    Git 高级用法,喜欢就拿去用
    既然有 HTTP 请求,为什么还要用 RPC 调用?
    SpringBoot和Spring到底有没有本质的不同?
    一条简单的更新语句,MySQL是如何加锁的?
  • 原文地址:https://www.cnblogs.com/houchen/p/13237297.html
Copyright © 2011-2022 走看看