【归纳总结】SpringMVC之异常处理

当程序中有异常时,异常会不断地向上抛出,SpringMVC可以进行统一的异常处理。用户就不会看到异常的页面。
在这里插入图片描述
一般有两种处理方式:

1️⃣ HandlerExceptionResolver(全局处理)

全局处理只要异常抛出就进入该处理器

编写一个类继承HandlerExceptionResolver接口,重写方法resolveException,并使用@Component注解注册为组件,就可以使用了。

该方法的参数:

  • handler:Handler方法
  • exception:抛出的异常

该方法的返回值

  • ModelAndView:最后处理后的ModelAndView

在该方法中可以根据抛出的异常不同,做个性化的处理

例如:

/**
 * 只需要增加@Component则生效(只需要注册到容器中)
 * handler方法向上抛出异常,则会执行到resovleException方法
 */
@Component
public class CustomHandlerExceptionResolver implements HandlerExceptionResolver {
    /**
     *
     * @param handler → Handler方法
     * @param exception → 向上抛出的异常对应
     * @return ModelAndView → 最后处理后的ModelAndView
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response,
                                         Object handler, Exception exception) {
        ModelAndView modelAndView = new ModelAndView("/WEB-INF/exception.jsp");

        //根据抛出的异常不同,做个性化的处理 → 异常类型的不同
        if (exception instanceof SensitiveWordException) {
            SensitiveWordException sensitiveWordException = (SensitiveWordException) exception;
            String word = sensitiveWordException.getWord();//从handler方法中抛出的异常对象封装的
            String message = sensitiveWordException.getMessage();
            modelAndView.setViewName("/WEB-INF/sensitive.jsp");
            modelAndView.addObject("word", word);
            modelAndView.addObject("messagez", message);
        }

        return modelAndView;
    }
}

其中的sensitiveWordException是我=一个自定义的异常类,继承自Exception类

2️⃣ ExceptionHandler(映射方式)(推荐)

建立异常和Handler之间的映射,比之前的方法灵活

可以根据异常的类型不同直接映射到不同的方法上

建立一个类,在类上使用@ControllerAdvice注解,这个类中的方法用@ExceptionHandler注解标记,value值为一个异常类型的数组

例如:

@ControllerAdvice //使用该注解,才能够使用ExceptionHandler
//@RestControllerAdvice
public class ExceptionController {

    //方法的写法和HandlerMethod写法一毛一样
    @ExceptionHandler(ArithmeticException.class)
    public String exception(ArithmeticException exception){ //ModelAndView
        return "/WEB-INF/exception.jsp";
    }

    @ExceptionHandler(SensitiveWordException.class)
    @ResponseBody
    public BaseRespVo sensitive(SensitiveWordException exception){ //json
        String message = exception.getMessage();
        return BaseRespVo.fail(message);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值