一,异常处理
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;
}
}