Spring Boot 自定义全局异常处理
版权申诉
195 浏览量
更新于2024-06-19
收藏 1.1MB DOCX 举报
"Spring Boot 全局异常处理整理"
在Spring Boot应用中,全局异常处理是一项关键功能,它确保了当系统出现异常时,能够提供一致且友好的反馈给客户端。本文将探讨Spring Boot的默认异常处理机制以及如何自定义这些处理方式。
首先,Spring Boot提供了一套默认的异常处理机制。对于浏览器客户端,如果请求的URL不存在或者服务器在处理请求时抛出异常,Spring Boot会返回一个名为"Whitelabel Error Page"的HTML页面,这是针对浏览器请求(通常请求头中的Accept字段为"text/html")的默认响应。另一方面,对于非浏览器客户端,如Postman,Spring Boot会返回一个JSON格式的错误信息,包含错误代码、消息等。
这个默认行为基于`/error`请求路径,该路径由`BasicErrorController`处理。控制器会检查请求头中的`Accept`字段,如果它是"text/html",则返回HTML视图,否则返回JSON数据。在`BasicErrorController`的源代码中可以看到这种逻辑。
为了自定义Spring Boot的错误处理,我们可以采取以下步骤:
1. 替换默认错误页面:最简单的方法是在`src/main/resources/templates`目录下创建一个名为`error.html`的文件。这将覆盖默认的"Whitelabel Error Page"。例如,如果你使用Thymeleaf模板引擎,你可以编写自定义的HTML代码来设计错误页面。当发生错误时,这个页面会被显示给用户。
2. 根据状态码返回不同视图:如果你希望根据HTTP状态码返回不同的错误页面,例如404页和500页,有两种方式实现。一种是创建多个静态HTML文件,分别对应不同状态码,然后在Spring Boot配置中指定它们。另一种方法是利用`@ControllerAdvice`注解来创建一个全局异常处理器,通过`@ExceptionHandler`注解来捕获特定类型的异常并返回相应的视图。
```java
@ControllerAdvice
public class CustomGlobalExceptionHandler {
@ExceptionHandler(value = {ResourceNotFoundException.class})
public ModelAndView handleResourceNotFoundException() {
ModelAndView modelAndView = new ModelAndView("404");
modelAndView.addObject("message", "资源未找到");
return modelAndView;
}
@ExceptionHandler(value = {Exception.class})
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) {
ModelAndView modelAndView = new ModelAndView("500");
modelAndView.addObject("exception", e);
modelAndView.addObject("url", req.getRequestURL());
return modelAndView;
}
}
```
在上面的代码中,`CustomGlobalExceptionHandler`类捕获`ResourceNotFoundException`异常并返回404视图,而所有其他未处理的异常则返回500视图。`ModelAndView`对象用于传递额外的信息,如错误消息或异常实例,到视图中。
通过以上方式,开发者可以有效地管理和定制Spring Boot应用的全局异常处理,提供更加人性化和符合业务需求的错误反馈。这不仅提高了用户体验,也使得系统的错误处理更加规范和统一。
2020-08-25 上传
2022-07-10 上传
2022-06-19 上传
2022-06-30 上传
2024-05-03 上传
2021-12-29 上传
2023-08-10 上传
小小哭包
- 粉丝: 2050
- 资源: 4206
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程