浅谈spring之自定义异常

1.创建一个普通类,实现HandlerExceptionResolver接口

@Component
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {

    /*
        捕获并处理异常信息
            请求:
                request
                response
                handler: 用户具体调用处理的某个方法
                ex:具体的异常信息
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView modelAndView = new ModelAndView();
        // 将错误信息,写入到日志中
        modelAndView.addObject("error", "sorry,服务器繁忙,请稍后重试~~~");
        modelAndView.setViewName("forward:/WEB-INF/error.jsp");
        return modelAndView;
    }
}

2.## @ControllerAdvice【推荐】

配合@ExceptionHandler注解结合使用,当异常抛到controller层时,可以对异常进行统一的处理

@ControllerAdvice
public class MyControllerAdvice {

    /**
     * @param e    表示异常类型
     * @param model 表示响应的信息对象(request域)
     * @return
     */
    @ExceptionHandler(NullPointerException.class)  //专门捕获空指针异常
    public String handlerNullPointException(NullPointerException e, Model model){
        model.addAttribute("message", "空指针异常");
        return "forward:/WEB-INF/error.jsp";
    }

    /**
     * @param e    表示异常类型
     * @param model 表示响应的信息对象(request域)
     * @return
     */
    @ExceptionHandler(NumberFormatException.class) //专门捕获数值类型转换异常
    public String handlerNumberFormatException(NumberFormatException e, Model model){

        model.addAttribute("message", "数值类型转换异常");
        return "forward:/WEB-INF/error.jsp";
    }

    /**
     * @param e    表示异常类型
     * @param model 表示响应的信息对象(request域)
     * @return
     */
    @ExceptionHandler(Exception.class)  //捕获所有异常
    public String handlerException(Exception e, Model model){
        System.out.println(e.getMessage());
        e.printStackTrace();
        model.addAttribute("message", "服务器繁忙。。。");
        return "forward:/WEB-INF/error.jsp";
    }
}

3.在web.xml配置当错误代码为404时候自动调转到特定页面

<error-page>
    <error-code>404</error-code>
    <location>/error.jsp</location>
</error-page>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值