SpringMVC自定义异常处理器(配置式、注解式)

21 篇文章 0 订阅

框架异常处理模式:
控制器中把异常抛给框架,框架捕获异常,把捕获的异常交给异常处理器对象。
异常处理器对象是框架中的特定的一些类,可以处理异常
异常处理器必须实现HandlerExceptionResolver接口:异常处理器有框架自己实现的,也可以开发人员自定义实现
SpringMVC常用的异常处理方式:
1.自定义异常处理器,自己实现HandlerExceptionResolver接口
2.使用框架中的注解:@ExcptionHandler

  • 自定义异常处理器(配置式)

步骤:1.新建类实现HandlerExceptionResolver接口,重写接口中的函数,实现异常的处理逻辑

2.在SpringMVC的配置文件中声明自定义异常处理器

  • 项目目录:
    在这里插入图片描述

注意:exception目录下的文件都继承Exception并实现它的有参构造和无参构造

  • 在SpringMVC核心配置文件:
<!--声明自定义异常处理器-->
    <bean class="com.bjpowernode.handle.CustomExceptionHandler"/>
  • Controller层:
@RequestMapping(value = "/Exception.do")
    public ModelAndView toException(String name,String age)
            throws NameException,AgeException{
        ModelAndView mv=new ModelAndView();
        if(name==null||"".equals(name)) {
            throw new NameException("名字不能为空");
        }else if("".equals(age)||age==null||"80".equals(age)){
            throw new AgeException("输入年龄有误");
        }else{
            mv.setViewName("show");
        }
        return mv;
    }
  • SpringMVC的异常处理器:
public class CustomExceptionHandler implements HandlerExceptionResolver {
    /**由于该类实现了HandlerExceptionResolver所以该类就是异常处理器
     * 在SpringMVC中只有异常处理器对象才能处理异常
     * 当处理器中抛出异常后,SpringMVC能够捕获异常,调用所有的实现了HandlerExceptionResolver类的
     * 执行类中的resolverException(),由这个函数处理异常
     * resolverException()函数异常处理结果就是用户看到的异常
     *
     * 参数中的handler代表处理器对象(发生异常的处理器对象)
     * */
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest,
                                         HttpServletResponse httpServletResponse,
                                         Object handler, Exception e) {
        ModelAndView mv=new ModelAndView();
        mv.addObject("Exception",e);
        if(e instanceof NameException){
            mv.addObject("tips","名称不能为空");
            mv.setViewName("nameError");
        }else if(e instanceof AgeException){
            mv.addObject("tips","输入年龄有误");
            mv.setViewName("ageError");
        }else{
            mv.addObject("tips","请求超时,请重试!");
            mv.setViewName("defaultError");
        }

        return mv;
    }
}
  • 自定义异常处理器(注解式):
  • 项目目录:

在这里插入图片描述

  • springmvc.xml文件:
<!--指定@ControllerAdvice注解的包名-->
    <context:component-scan base-package="com.bjpowernode.handle"/>
    <!--添加注解驱动-->
    <mvc:annotation-driven/>
  • GloalExceptionHandler文件:
/**@ControllerAdvice:处理器增强,目的就是给controller类增强功能
 * 类类似于AOP思想,常见的是增强异常处理功能
 * */
@ControllerAdvice
public class GloalEceptionHandler {
    /**@ExceptionHandler:说明函数是异常的
     *      属性value:异常类的class,表示处理的异常类型当
     *      这个异常发生时有当前函数处理
     *      位置:函数的上面
     * */
    @ExceptionHandler(value = NameException.class)
    public ModelAndView doNameException(Exception ex){
        ModelAndView mv=new ModelAndView();
        mv.addObject("tips","使用注解处理name异常");
        mv.addObject("Exception",ex);
        mv.setViewName("nameError");
        return mv;
    }

    @ExceptionHandler(value = AgeException.class)
    public ModelAndView doAgeException(Exception ex){
        ModelAndView mv=new ModelAndView();
        mv.addObject("tips","使用注解处理age异常");
        mv.addObject("Exception",ex);
        mv.setViewName("ageError");
        return mv;
    }
    /**
     * 当@ExceptionHandler处理其他异常的时候不需要value属性
     * */
    @ExceptionHandler
    public ModelAndView doOtherException(Exception ex){
        ModelAndView mv=new ModelAndView();
        mv.addObject("tips","使用注解处理Other异常");
        mv.addObject("Exception",ex);
        mv.setViewName("defaultError");
        return mv;
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值