Spring Boot 自定义全局异常处理
版权申诉
90 浏览量
更新于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-30 上传
2021-12-29 上传
2024-05-03 上传
2022-06-19 上传
2023-08-10 上传
小小哭包
- 粉丝: 2050
- 资源: 4203
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载