SpringBoot中有五种处理异常的方式:

一、自定义错误页面

  SpringBoot默认的处理异常机制:SpringBoot默认的已经提供了一套处理异常的机制。一旦程序出现了异常SpringBoot就像/error的url发送请求。在springboot中提供了一个叫BasicExceptionController来处理/error请求,然后跳转到默认显示异常的页面来展示异常信息。

  如果我们需要将所有的异常统一跳转到自定义的错误页面,需要在src/main/resources/templates目录下创建error.html页面。并添加这个标签。

  <span th:text="${exception}"></span>

二、@ExceptionHandle注解处理异常

  只需要在controller中添加这样的方法:

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

三、@ControllerAdvice+@ExceptionHandler注解处理异常

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

 @ControllerAdvice
public class GlobalException {
@ExceptionHandler(value={java.lang.ArithmeticException.class})
public ModelAndView arithmeticExceptionHandler(Exception e) {
ModelAndView mv = new ModelAndView();
mv.addObject("error", e.toString());
mv.setViewName("error");
return mv;
}
}

四、配置SimpleMappingExceptionResolver处理异常

  在全局异常类中添加一个方法完成异常类的统一处理

 @Configuration
public class GlobalException {
public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver() {
SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
Properties properties = new Properties();
properties.put("java.lang.ArithmeticException", "error");
resolver.setExceptionMappings(properties);
return resolver;
}
}

五、自定义HandlerExceptionResolver类处理异常

  需要在全局异常类中实现HandlerExceptionResolver接口

 @Configuration
public class GlobalException implements HandlerExceptionResolver {
@Override
public ModelAndView resolverException(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) {
ModelAndView mv = new ModelAndView();
if(exception instanceof ArithmeticException) {
mv.setViewName("error");
}
mv.addObject("error", exception.toString());
return mv;
}
}

最新文章

  1. Spring定时任务的几种实现
  2. 让webapi只接受ajax请求
  3. mount: unknown filesystem type &#39;LVM2_member&#39;解决方案
  4. Qt:无标题栏无边框程序的拖动和改变大小
  5. mac下的改装人生——制作mac os 启动盘
  6. 第八届河南省赛F.Distribution(水题)
  7. cmd命令行查看当前系统版本和版本是32位还是64位
  8. Flex回声消除的最佳方法
  9. A+B for Input-Output Practice (VI)
  10. Server版Linux命令提示符揭秘
  11. 内置窗口 pyqt5
  12. visual studio 2017 installer 安装包的安装必备组件设置
  13. kali 创建用户
  14. input text文本框内部最后面放一个按钮
  15. ASP.NET Core使用Elasticsearch记录NLog日志
  16. 使用cancelBubble竟然可以阻止所有浏览器的冒泡?
  17. Composer 添加 Laravel-china 的国内源
  18. 基于spring boot admin 做监控的一些问题记录
  19. @pathVariable的作用(二十二)
  20. [leetcode] 204. Count Primes 统计小于非负整数n的素数的个数

热门文章

  1. Linux之redis的安装,主从配置
  2. 【异常】Maxwell异常 Exception in thread &quot;main&quot; net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: &lt;EOF&gt; after : &quot;&quot;
  3. 昨天521表白失败,我想用Python分析一下...表白记录和聊天记录
  4. java - day019 - 反射
  5. syzkaller安装
  6. HTML手写课程表,练基础
  7. es其他常用功能
  8. Spring Security 流程
  9. 02 Spring IOC
  10. vue 传入一个对象的所有属性