分享

springboot统一异常处理方法

 jackeyqing 2020-06-08

这个是统一异常处理类, @ControllerAdvice这个注解声明的表示统一异常处理,@ExceptionHandler(value = Exception.class)这个注解写在方法上表示,该方法处理哪个异常.

package com.buba.exceptionController;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
//捕捉工程所有异常
@ControllerAdvice
public class GloableExceptionController {
    //拦截Exception类型异常
    @ExceptionHandler(value = Exception.class)
    public ModelAndView defaultExceptionHandler(HttpServletRequest request,Exception ex){
        ModelAndView modelAndView = new ModelAndView("defaultException");
        //获取请求路径
        modelAndView.addObject("url",request.getRequestURL());
        //异常对象
        modelAndView.addObject("ex",ex);
        //异常对象信息
        modelAndView.addObject("message",ex.getMessage());
        return modelAndView;
    }

    @ExceptionHandler(value = ArrayIndexOutOfBoundsException.class)
    public ModelAndView defaultExceptionHandler2(HttpServletRequest request,Exception ex){
        ModelAndView modelAndView = new ModelAndView("defaultException2");
        //获取请求路径
        modelAndView.addObject("url",request.getRequestURL());
        //异常对象
        modelAndView.addObject("ex",ex);
        //异常对象信息
        modelAndView.addObject("message",ex.getMessage());
        return modelAndView;
    }
} 

这是两个异常页面,进行测试 

 

 

我controller写了两个异常方法,第一个是ArrayIndexOutOfBoundsException这个异常,第二个是NullPointerException

 

当访问第二个异常的时候,因为在异常处理类中没有精确指明有空指针异常,所以会找它的父类,exception,所以出来的是第一个异常页面

当访问第一个异常的时候,因为在异常处理类中有明确指定的这个异常,所以返回的是第二个页面

 

总结: 也就是说这个异常处理类中,可以获取所有的异常都拿excepion来接收,也可以明确指定哪个异常,跟上下顺序无关,有明确指定的异常会找明确指定的,没有就找父类.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多