Springboot异常处理

一,异常处理

  SpringBoot中对于异常处理提供了五种方式

  1,自定义错误页面

    SpringBoot默认的处理异常机制:SpringBoot默认已经提供了一套处理异常的机制

    一旦程序中出现异常SpringBoot会向/error的url发送请求

    在SpringBoot中提供了一个名为BasicErrorController来处理/error请求

    然后跳转到默认显示异常的页面来展示异常信息

      如果我们需要将所有的异常统一跳转到自定义的错误页面

    需要在src/main/resources/templates目录下创建error.html页面

    注意:页面名称必须叫error

  实例:

    

 

 

      默认报错页面

    

 

 

    编写html页面

 

    

 

 

      

  2,使用@ExceptionHandler注解  可以把不同的错误分开处理  也可以同时处理多个错误  注意:必须和能产生错误的方法在一个类中

      

 

 

      

 

 

      

 

 

  3,通过@ControllerAdvice与@ExceptionHandler注解处理异常  缺点就是全局异常类里面的方法特别多

    3.1创建全局异常类

/*
* 全局异常处理类
* */
@ControllerAdvice
public class GlobalException {
    @ExceptionHandler(value={java.lang.NullPointerException.class})
    public ModelAndView nullpointExceptionHandler(Exception e)
    {
        ModelAndView mv=new ModelAndView();
        mv.addObject("err",e.toString());
        mv.setViewName("error1");
        return mv;
    };

    @ExceptionHandler(value={java.lang.ArithmeticException.class})
    public ModelAndView arithmeticException(Exception e)
    {
        ModelAndView mv = new ModelAndView();
        mv.addObject("err",e.toString());
        mv.setViewName("error1");
        return mv;
    };
}

 

    3.2Controller类

 

@Controller
public class controller {
    /*
    * 空指针异常
    * */
    @RequestMapping("/showInfo")
    public String showInfo()
    {
        String str=null;
        str.length();
        return "ok";
    };
    /*
    * 算数异常
    * */
    @RequestMapping("showInfo2")
    public String showInfo2()
    {
        int i=10/0;
        return "ok";
    };
}

 

     

 

   4,通过SimpleMappingExceptionResolver对象处理异常  但是只能根据异常跳转页面不能传递异常信息   只是根据异常做了映射

    4.1,Controller不变  修改一下异常类

      

@Configuration
public class GlobalException2 {

    /*
    * 此方法必须返回SimpleMappingExceptionResolver对象
    * */
    @Bean
    public SimpleMappingExceptionResolver getException()
    {
        SimpleMappingExceptionResolver smer = new SimpleMappingExceptionResolver();
        Properties properties = new Properties();
        /*
        * 参数一:异常类型,并且是全名
        * 参数二:视图名称
        * */
        properties.put("java.lang.NullPointerException","error2");
        properties.put("java.lang.ArithmeticException","error3");
        smer.setExceptionMappings(properties);
        return smer;
    };
}

 

  5,自定义HandlerExceptionResolver

 

    5.1Controller不变  修改异常类

/*
* 必须要实现HandlerExceptionResolver接口
* */
@Configuration
public class GlobalException3 implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView mv = new ModelAndView();
        //判断不同异常类型,做不同的视图跳转
        if(e instanceof NullPointerException)
        {
            mv.setViewName("error4");

        };
        if(e instanceof ArithmeticException)
        {
            mv.setViewName("error5");
        };
        mv.addObject("err",e.toString());
        return mv;
    }
}

 

posted @ 2020-05-02 16:29  拯代码  阅读(1132)  评论(0编辑  收藏  举报