Spring-Boot异常处理5种方式整合

SpringBoot 异常处理

一、 SpringBoot 中异常处理方式

1 SpringBoot 中对于异常处理提供了五种处理方式
1.1自定义错误页面
SpringBoot 默认的处理异常的机制: SpringBoot 默认的已经提供了一套处理异常的机制。 一旦程序中出现了异常 SpringBoot 会像/error 的 url 发送请求。在 springBoot 中提供了一个 叫 BasicExceptionController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常 信息。
如 果 我 们 需 要 将 所 有 的 异 常 同 一 跳 转 到 自 定 义 的 错 误 页 面 , 需 要 再 src/main/resources/templates 目录下创建 error.html 页面。
注意:
名称必须叫 error

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>错误提示页面</title> </head> <body> 出错了,请与管理员联系。。。 <span th:text="${exception}"></span> </body> </html>

1.2@ExceptionHandle 注解处理异常
1.2.1 Controller

/** * SpringBoot 处理异常方式一:自定义错误页面 * * */ @Controller public class DemoController {
@RequestMapping("/show") public String showInfo(){ String str = null; str.length(); return "index"; }
@RequestMapping("/show2") public String showInfo2(){ int a = 10/0; return "index"; }
/** * java.lang.ArithmeticException * 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视
图的指定
* 参数 Exception e:会将产生异常对象注入到方法中 */ @ExceptionHandler(value={java.lang.ArithmeticException.class}) public ModelAndView arithmeticExceptionHandler(Exception e){ ModelAndView mv = new ModelAndView(); mv.addObject("error", e.toString()); mv.setViewName("error1"); return mv; }
/** * java.lang.NullPointerException * 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视
图的指定
* 参数 Exception e:会将产生异常对象注入到方法中 */ @ExceptionHandler(value={java.lang.NullPointerException.class}) public ModelAndView nullPointerExceptionHandler(Exception e){ ModelAndView mv = new ModelAndView(); mv.addObject("error", e.toString()); mv.setViewName("error2"); return mv; }
}

1.2.2 页面

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>错误提示页面-ArithmeticException</title> </head> <body> 出错了,请与管理员联系。。。 <span th:text="${error}"></span> </body> </html> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>错误提示页面-NullPointerException</title> </head> <body> 出错了,请与管理员联系。。。 <span th:text="${error}"></span> </body> </html>

1.3@ControllerAdvice+@ExceptionHandler 注解处理异常
1.3.1 需要创建一个能够处理异常的全局异常类。在该类上需
要添加@ControllerAdvice 注解/**

* 全局异常处理类 * * */ @ControllerAdvice public class GlobalException { /** * java.lang.ArithmeticException * 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视 图的指定 * 参数 Exception e:会将产生异常对象注入到方法中 */ @ExceptionHandler(value={java.lang.ArithmeticException.class}) public ModelAndView arithmeticExceptionHandler(Exception e){ ModelAndView mv = new ModelAndView(); mv.addObject("error", e.toString()); mv.setViewName("error1"); return mv; }
/** * java.lang.NullPointerException * 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视
图的指定
* 参数 Exception e:会将产生异常对象注入到方法中 */ @ExceptionHandler(value={java.lang.NullPointerException.class}) public ModelAndView nullPointerExceptionHandler(Exception e){ ModelAndView mv = new ModelAndView(); mv.addObject("error", e.toString()); mv.setViewName("error2"); return mv; }
}

1.4配置 SimpleMappingExceptionResolver 处理异常
1.4.1 在全局异常类中添加一个方法完成异常的同一处理

/** * 通过 SimpleMappingExceptionResolver 做全局异常处理 * * */ @Configuration public class GlobalException {
/** * 该方法必须要有返回值。返回值类型必须是: SimpleMappingExceptionResolver */ @Bean public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver(){ SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
Properties mappings = new Properties();
/** * 参数一:异常的类型,注意必须是异常类型的全名 * 参数二:视图名称 */ mappings.put("java.lang.ArithmeticException", "error1"); mappings.put("java.lang.NullPointerException","error2");
//设置异常与视图映射信息的 resolver.setExceptionMappings(mappings);
return resolver;
}
}

1.5自定义 HandlerExceptionResolver 类处理异常
1.5.1 需 要 再 全 局 异 常 处 理 类 中 实 现

HandlerExceptionResolver 接口
/** * 通过实现 HandlerExceptionResolver 接口做全局异常处理 * * */ @Configuration public class GlobalException implements HandlerExceptionResolver {
@Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { ModelAndView mv = new ModelAndView(); //判断不同异常类型,做不同视图跳转 if(ex instanceof ArithmeticException){ mv.setViewName("error1"); }
if(ex instanceof NullPointerException){ mv.setViewName("error2"); } mv.addObject("error", ex.toString());
return mv;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值