SpringMvc中的异常处理器(在SpringBoot中也可使用)

本文介绍了如何在SpringMVC开发中处理单个控制器、全局范围和自定义的异常,包括使用@ControllerAdvice注解创建全局异常处理器和自定义HandlerExceptionResolver实现异常映射。
摘要由CSDN通过智能技术生成

目录

一、单个控制器异常处理

二、全局异常处理器

三、自定义异常处理器


在开发过程中,Dao,service,Controller层代码出现异常都可能抛出异常。如果哪里产生异常就在哪里处理异常,则会降低开发效率。所以一般情况下我们会让异常向上抛出,最终到达DispatcherServlet中,此时SpringMvc提供了异常处理器进行异常处理,这样可以提高开发效率。

一、单个控制器异常处理

@RequestMapping("/t2")
@Controller
public class MyController2 {

    @RequestMapping("/c1")
    public String t1(){
        String str=null;
        str.length();
        return "main";
    }
    @RequestMapping("/c2")
    public String t2(){
        int i=1/0;
        return "main";
    }
    @RequestMapping("/c3")
    public String t3(){
        int[] a=new int[1];
        a[2]=1;
        return "main";
    }
    @ExceptionHandler({java.lang.NullPointerException.class})
    public String exce1(Exception e, Model model){
        //向模型中添加异常对象
        model.addAttribute("msg",e);
        return "error";
    }
    //方法1处理不了的异常交给2处理
    @ExceptionHandler(java.lang.Exception.class)
    public String ex2(Exception e,Model model){
        model.addAttribute("msg",e);
        return "error";
    }
}

二、全局异常处理器

在控制器中定义异常处理方法只能处理该控制器类的异常,要想处理所有控制器的异常,需要定义全局异常处理类。

//全局异常处理器类,需要添加@ControllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(java.lang.NullPointerException.class)
    public String exception1(Exception e, Model model){
        model.addAttribute("msg",e);
        return "error";
    }
    //方法一捕捉不到的交给2
    @ExceptionHandler(java.lang.Exception.class)
    public String exception2(Exception e,Model model){
        model.addAttribute("msg",e);
        return "error1";
    }
}

三、自定义异常处理器

以上都是SpringMvc自带的异常处理器进行异常处理,我们也可以通过自定义异常处理器进行异常处理

//自定义异常处理器需要实现HandlerExceptionResolver接口,并放入Spring容器中
@Component
public class MyExceptionHandler implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView modelAndView=new ModelAndView();
        if(ex instanceof NullPointerException){
            //空指针异常
            modelAndView.setViewName("error");
        }
        else{
            modelAndView.setViewName("error1");
        }
        modelAndView.addObject("msg",ex);
        return modelAndView;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜到极致就是渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值