Spring Boot 自定义全局异常处理

版权申诉
0 下载量 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应用的全局异常处理,提供更加人性化和符合业务需求的错误反馈。这不仅提高了用户体验,也使得系统的错误处理更加规范和统一。