springboot 5种异常处理方式

方式一:

/**
* spring boot 异常处理方式 1
* 在resources/templates 添加 error.html
* 高版本用${message}获取异常信息
* 低版本用${exception} 获取异常信息
* 空指针异常
* java.lang.NullPointerException
* 缺点 所有异常都出现在同一页面中
* @return
*/
@RequestMapping("/showOne")
public String showOne(){

String str = null;

System.out.println(str.length());

return "index";
}
方式二:
使用ModelAndView(在同一controller中有效)
/**
* 异常处理方式二
* 在同一个类中新建返回ModelAndView 对象的方法
* 参数 Exception e
* 通过注解@ExceptionHandler 注入要返回页面的异常类
* 根据不同的异常类。将异常抛到不同的页面中
* 缺点 每个controller 中都要做处理
* @param e
* @return
*/
@ExceptionHandler(value={java.lang.NullPointerException.class})
public ModelAndView getShowOneException(Exception e){

ModelAndView mv = new ModelAndView();

mv.addObject("error1",e.toString());

mv.setViewName("error1");

return mv;

}
方式三 全局性 使用注解 @ControllerAdvice 和 @ExceptionHandler
优点:所有controller都可检测
缺点:不同的错误页面对应不同的方@ControllerAdvice
public class GlobalController {

/**
* 异常处理方式三
* 在同一个类中新建返回ModelAndView 对象的方法
* 参数 Exception e
* 通过注解@ExceptionHandler 注入要返回页面的异常类
* 根据不同的异常类。将异常抛到不同的页面中
* @param e
* @return
*/
/*
@ExceptionHandler(value={java.lang.NullPointerException.class})
public ModelAndView getShowOneException(Exception e){

ModelAndView mv = new ModelAndView();

mv.addObject("error3",e.toString());

mv.setViewName("error3");

return mv;

}
}

方式四
使用注解 @Configuration 和 @Bean 注入
实现一个方法处理多个异常
优点:只需一个方法
缺点:错误提示比较模糊。

@Configuration //配置处理异常
public class GlobalController {


@Bean
public SimpleMappingExceptionResolver getSimpleMappingException(){

SimpleMappingExceptionResolver spe = new SimpleMappingExceptionResolver();

Properties p = new Properties();
     //key:异常类型 value:对应view页面
p.setProperty("java.lang.ArithmeticException","error6");
p.setProperty("java.lang.NullPointerException","error5");

spe.setExceptionMappings(p);

return spe;
}
}

方式五,使用@Configuration 并实现HandlerExceptionResolver 接口
优点:既可以不同异常指定不同页面 又可以同一方法处理多个异常
@Configuration //配置处理异常
public class GlobalIHandlerController implements HandlerExceptionResolver {

@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

ModelAndView mv = new ModelAndView();

     //判断 exception 是否是该异常
if(ex instanceof ArithmeticException){

       //指定view页面
mv.setViewName("error7");
}

if(ex instanceof NullPointerException){


mv.setViewName("error8");
}

     //异常信息
mv.addObject("error",ex.toString());

return mv;
}
}
以上是自学总结。有借鉴前辈帖子望见谅。不足之处请多多指教

猜你喜欢

转载自www.cnblogs.com/yixingzhou/p/11120130.html