• SpringMVC异常处理


    一、系统异常处理器

      在mvc配置文件中配置系统异常处理器,用来解决异常处理问题

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="defaultErrorView" value="error"/> //异常处理页面
            <property name="exceptionAttribute" value="ex"/> //异常
    </bean>

      页面配置:

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>//允许使用el表达式
    <html>
    <head>
        <title>错误页面</title>
    </head>
    <body>
        发生错误:${ex.message}
    </body>
    </html>

      模拟错误:

    @RequestMapping("/firstRequest")
        public String firstRequest(){
            //模拟异常
            int result=5/0;
            return "index";
        }

    二、使用系统异常处理器实现处理自定义异常类

      自定义异常类:

    package com.springmvc.exception;
    
    public class AgeException extends Exception{
        public AgeException() {
        }
    
        public AgeException(String message) {
            super(message);
        }
    }
    package com.springmvc.exception;
    
    
    public class NameException extends Exception{
        public NameException() {
        }
    
        public NameException(String message) {
            super(message);
        }
    }

      MVC配置文件配置:

    <!--系统异常处理器-->
        <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="defaultErrorView" value="error"/>
            <property name="exceptionAttribute" value="ex"/>
           <!--定制异常-->
            <property name="exceptionMappings">
                <props>
                    <prop key="com.springmvc.exception.NameException">nameError</prop>
                    <prop key="com.springmvc.exception.AgeException">ageError</prop><!--不同的页面-->
    </props> </property> </bean>

      页面配置:

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
        <title>Age异常</title>
    </head>
    <body>
    您提交的数据发生了:${ex.message}
    </body>
    </html>
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
        <title>Name异常</title>
    </head>
    <body>
        您提交的数据发生了:${ex.message}
    </body>
    </html>

      模拟异常:

    @RequestMapping("/secondRequest")
        public String secondRequest(String userName,Integer userAge) throws NameException, AgeException {
            if(!userName.equals("admin")){
                //手动创建一个Name异常
                throw  new NameException("名称错误!!!!!!!!");
            }
            if(userAge<0||userAge>80){
                //手动创建一个Age异常
                throw  new AgeException("年龄太大,不符合规定!!!!!!");
            }
            return "index";
        }

    三、自定义异常处理器

    /**
     * 自定义异常处理器
     */
    public class MyHandlerException implements HandlerExceptionResolver {
        @Override
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
            ModelAndView modelAndView=new ModelAndView();
            //如果发生异常,我们给他一个默认的异常处理页面
            modelAndView.setViewName("error");
            modelAndView.addObject("ex",ex);
    
            //如果发生Name异常,则跳转到Name异常页面
            if(ex instanceof NameException){
                modelAndView.setViewName("nameError");
            }
            if(ex instanceof AgeException){
                modelAndView.setViewName("ageError");
            }
            return modelAndView;
        }
    }

      配置文件中配置:

     <!--将自定义异常处理器注册到Spring容器当中-->
        <bean class="com.springmvc.exception.MyHandlerException"/>

      其余操作和之前一样

    四、使用注解处理异常

      4.1使用注解处理局部异常

    /**
         * 局部注解处理
         */
    @ExceptionHandler
        public ModelAndView exceptionHandler(Exception ex){
            ModelAndView modelAndView=new ModelAndView();
            //如果发生异常,我们给他一个默认的异常处理页面
            modelAndView.setViewName("error");
            modelAndView.addObject("ex",ex);
    
            //如果发生Name异常,则跳转到Name异常页面
            if(ex instanceof NameException){
                modelAndView.setViewName("nameError");
            }
            if(ex instanceof AgeException){
                modelAndView.setViewName("ageError");
            }
            return modelAndView;
        }

      4.2使用注解处理所有controller异常

    /**
     * 要让这个类处理所有Controller的异常
     */
    @ControllerAdvice
    public class MyControllerAdvice {
        @ExceptionHandler
        public ModelAndView exceptionHandler(Exception ex){
            ModelAndView modelAndView=new ModelAndView();
            //如果发生异常,我们给他一个默认的异常处理页面
            modelAndView.setViewName("error");
            modelAndView.addObject("ex",ex);
    
            //如果发生Name异常,则跳转到Name异常页面
            if(ex instanceof NameException){
                modelAndView.setViewName("nameError");
            }
            if(ex instanceof AgeException){
                modelAndView.setViewName("ageError");
            }
            return modelAndView;
        }
    }
  • 相关阅读:
    CentOS 6.4 系统下的MySQL的主从库配置
    扫盲: JAVA基本常识
    ant学习
    Linux一些命令
    redis学习
    扫盲:注册表和绿色软件常识
    Java.前端.Layer.open.btn验证无效
    Java.数据结构.集合体系详解
    PageHelper踩坑
    Scrum.站立会议介绍
  • 原文地址:https://www.cnblogs.com/F017/p/11839558.html
Copyright © 2020-2023  润新知