SpringBoot中的异常处理方式

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

一、自定义错误页面

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

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

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

二、@ExceptionHandle注解处理异常

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

复制代码
1 @ExceptionHandler(value={java.lang.ArithmeticException.class})
2 public ModelAndView arithmeticExceptionHandler(Exception e) {
3     ModelAndView mv = new ModelAndView();
4     mv.addObject("error", e.toString());
5     mv.setViewName("error");
6     return mv;
7 }
复制代码

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

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

复制代码
 1 @ControllerAdvice
 2 public class GlobalException {
 3     @ExceptionHandler(value={java.lang.ArithmeticException.class})
 4     public ModelAndView arithmeticExceptionHandler(Exception e) {
 5         ModelAndView mv = new ModelAndView();
 6         mv.addObject("error", e.toString());
 7         mv.setViewName("error");
 8         return mv;
 9     }
10 }
复制代码

四、配置SimpleMappingExceptionResolver处理异常

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

复制代码
 1 @Configuration
 2 public class GlobalException {
 3     public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver() {
 4         SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
 5         Properties properties = new Properties();
 6         properties.put("java.lang.ArithmeticException", "error");
 7         resolver.setExceptionMappings(properties);
 8         return resolver;
 9     }
10 }
复制代码

五、自定义HandlerExceptionResolver类处理异常

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

复制代码
 1 @Configuration
 2 public class GlobalException implements HandlerExceptionResolver {
 3     @Override
 4     public ModelAndView resolverException(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) {
 5         ModelAndView mv = new ModelAndView();
 6         if(exception instanceof ArithmeticException) {
 7             mv.setViewName("error");
 8         }
 9         mv.addObject("error", exception.toString());
10         return mv;
11     }
12 }
复制代码

 

posted @   光何  阅读(1510)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2018-06-03 NIO、Servlet3.0、HTTP1.1
2016-06-03 BP神经网络

点击右上角即可分享
微信分享提示