SpringMVC框架异常处理

思想

在代码中通常会有许多异常,就会使用到大量的try{……}catch(){……}语句块,有时异常一旦改变就需要去修改catch语句块
而在框架中,为了避免这种情况,在框架中分出一块区域集中处理异常,使用aop的思想,代码中的异常只需要抛出即可
统一全局异常处理方案
会用到两个注解
@ExceptionHandler
@ControllerAdvice (控制器增强:给控制器类增加功能)

步骤

创建自定义异常类
创建一个普通类,作为全局异常处理类

  • 在类上面加上@ExceptionHandler
  • 在类定义方法上加@ControllerAdvice
    创建处理异常的视图页面
    在springmvc配置文件中加入组建扫描器和注解驱动

创建自定义异常类

例:创建MyUserException和它的子类NameException

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

    public MyUserException(String message) {
        super(message);
    }
}
//当用户姓名有问题时抛出的异常
public class NameException extends MyUserException {
    public NameException() {
        super();
    }

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

创建全局异常处理类

这个类和我们的controller控制器类是一样的,并且是在控制器类的上面增强了异常处理的功能
在这里插入图片描述

//控制器增强(增加异常处理功能)
@ControllerAdvice
public class GlobalExceptionHandler {
    //定义方法,和controller中一样
    @ExceptionHandler(NameException.class)
    public ModelAndView doNameException(Exception e){
        ModelAndView mv=new ModelAndView();
        mv.addObject("why","姓名不能叫zs");
        mv.setViewName("exception");
        return mv;
    }

    // 处理其他未知异常,不加value就行
    @ExceptionHandler
    public ModelAndView doOtherException(Exception e){
        ModelAndView mv=new ModelAndView();
        mv.setViewName("exception");
        return mv;
    }
}

异常处理页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>exception:${why}</h1>
</body>
</html>

注解扫描器和注解驱动

<context:component-scan base-package="exception"/>
 <mvc:annotation-driven/>

控制器抛出异常

假如注册的姓名叫zs就抛出异常


@Controller
@RequestMapping("/student")
public class StudentController {
    @Autowired
    private StudentService service;

    @RequestMapping("/addStudent")
    public ModelAndView addStudent(Student student) throws NameException {
        String tips="注册失败";
        if("zs".equals(student.getName())){
            throw new NameException("namewenti");
        }
        int i = service.addStudent(student);
        if(i>0){
            tips="注册成功";
        }
        ModelAndView mv=new ModelAndView();
        mv.addObject("tips",tips);
        //转发:显示的不受视图解析器限制
        mv.setViewName("forward:/WEB-INF/jsp/result.jsp");
        return mv;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值