SpringMVC异常处理

SpringMVC异常处理

1. 异常解决方法一

1.1 Controller

@Controller
@RequestMapping("/firsts")
public class FirstController {

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

}

1.2 Spring-mvc.xml文件

<!--系统异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="defaultErrorView" value="error"></property>
    <property name="exceptionAttribute" value="ex"></property>
</bean>

1.3 页面

 

2.异常解决方法二

2.1  jsp页面

<body>
<form method="post" action="/firsts/secondException">
    姓名:<input id="userName" name="userName" class="userName"/><span></span><br/>
    年龄:<input id="userAge"name="userAge" class="userAge"/><br/>
    <input type="submit" class="submit"/>
</form>
</body>

2.2  Controller

/*自动义异常处理器*/
@RequestMapping("/secondException")
public String secondException(String userName,Integer userAge) throws NameException, AgeException {
    if (!userName.equals("admin")){
        //手动创建一个Name异常
        throw new NameException("名称错误");
    }
    if(userAge>80){
        //手动创建一个异常
        throw new AgeException("年龄太大 ");
    }
    return "index";
}

2.3 Spring-mvc.xml文件

<!--系统异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="defaultErrorView" value="error"></property>
    <property name="exceptionAttribute" value="ex"></property>
    <property name="exceptionMappings">
        <props>
            <prop key="com.springmvc.exception.AgeException">ageerror</prop>
            <prop key="com.springmvc.exception.NameException">nameerror</prop>
        </props>
    </property>
</bean>

2.4 编写年龄异常类

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

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

2.5 编写年龄异常类

public class NameException extends Exception{

    public NameException() {
    }

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

2.6 名称输错时

 

2.7 年龄输错时

 

3. 自动义解决异常

3.1 创建类

public class MyHanlerException implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, 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;
    }

}

3.2 创建异常类同上

3.3 spring-mvc.xml文件

<!--将自动义异常处理器注册到spring容器中-->
<bean class="com.springmvc.exception.MyHanlerException"></bean>

 

3.4 名称输错时

 

3.5 年龄输错时

 

4. 局部注解处理异常

4.1 Controller

/*局部注解处理*/
@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 名称输错时

 

4.3 年龄输错时

 

5. 全局异常处理

5.1 创建解决异常的类

/*要让这个类处理所有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;
}
}

5.2 名称输错时

 

5.3 年龄输错时

 

原文地址:https://www.cnblogs.com/szhhhh/p/11834920.html