Spring MVC异常捕获

处理异常

  处理局部异常:

    也就是单个Controller类中抛出的异常

  处理全局异常:

    处理所有Controller类抛出的异常

局部异常

  模拟一个异常,当发生异常后跳转到指定页面

  控制器

@RequestMapping("/one")
    public String one(){
        //模拟一个异常
        if(1==1){
            int sum=5/0;
            return "myform";
        }
        return "index";
    }

  跳转的指定页面

<html>
<head>
    <title>异常</title>
</head>
<body>
出现了异常
</body>
</html>

手动创建异常

  手动创建异常,并且指定异常跳转指定页面

  创建两个异常类

public class nameError extends Exception{
    public nameError() {
    }

    public nameError(String message) {
        super(message);
    }
}


public class ageError extends Exception{
    public ageError() {
    }

    public ageError(String message) {
        super(message);
    }
}

  表单

<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="/threeController/one1" method="post">
        账号:<input type="text" name="uname"><br>
        密码:<input type="password" name="upwd"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

  控制器

@RequestMapping("/one1")
    public String one1(String uname,Integer upwd) throws nameError, ageError {
        if (!uname.equals("admin")){
            throw new nameError("name不正确!");
        }
        if (upwd>80){
            throw new ageError("age不正确!");
        }
        return "myform";
    }

  大配置文件

<!--系统异常处理器-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="defaultErrorView" value="error"/>
        <property name="exceptionAttribute" value="ex"/>
        <!--定制异常-->
        <property name="exceptionMappings">
            <props>
                <prop key="error.nameError">nameError</prop>
                <prop key="error.ageError">ageError</prop>
            </props>
        </property>
    </bean>

创建异常类(捕获所有异常) 

  异常类

/**
 * 要让这个类处理所有异常
 */
@ControllerAdvice
public class oneController {
    @ExceptionHandler
    public ModelAndView oneController(Exception ex) throws nameError, ageError {
        ModelAndView mv=new ModelAndView();
        mv.setViewName("myform");
        mv.addObject("ex",ex);
        if (ex instanceof nameError){
            throw new nameError("name不正确!");
        }
        if (ex instanceof ageError){
            throw new ageError("age不正确!");
        }
        return mv;
    }
}

  注意:(在这里大配置文件中的系统异常处理器就没有用了)

原文地址:https://www.cnblogs.com/whtt/p/11835094.html