如何使用 Spring Boot 实现全局异常处理
在Spring Boot应用程序中,全局异常处理可以通过@ControllerAdvice
注解和@ExceptionHandler
注解来实现。这种方法可以帮助我们捕获和处理所有控制器中抛出的异常,从而避免代码重复,并且可以给用户一个统一的错误响应格式。
「步骤 1: 创建一个全局异常处理类」
首先,你需要创建一个类并使用@ControllerAdvice
注解来标记它。这个类将作为全局异常处理器。
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.http.ResponseEntity; import org.springframework.http.HttpStatus; @ControllerAdvice public class GlobalExceptionHandler { }
「步骤 2: 定义异常处理方法」
在全局异常处理类中,你可以定义一个或多个方法来处理特定的异常。使用@ExceptionHandler
注解来指定这个方法可以处理哪些异常。
@ExceptionHandler(Exception.class) public ResponseEntity<Object> handleAllExceptions(Exception ex) { // 创建一个错误响应对象并返回 ErrorResponse errorResponse = new ErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, ex.getMessage()); return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR); }
在上面的例子中,我们创建了一个方法来处理所有类型的异常。你也可以为不同类型的异常创建不同的方法。
「步骤 3: 自定义错误响应」
通常,我们会创建一个自定义的错误响应类来封装错误信息,这样可以提供更多的错误详情给前端。
public class ErrorResponse { private HttpStatus status; private String message; public ErrorResponse(HttpStatus status, String message) { this.status = status; this.message = message; } // Getters and Setters }
「步骤 4: 测试全局异常处理」
一旦你设置好了全局异常处理器,你可以通过抛出异常来测试它。
@RestController public class TestController { @GetMapping("/test") public String test() { throw new RuntimeException("Test Exception"); } }
当你访问/test
端点时,应该会触发全局异常处理器,并返回你定义的错误响应。
「总结」
通过以上步骤,你可以在Spring Boot应用程序中实现全局异常处理。这不仅可以减少代码重复,还可以提供更好的用户体验和错误管理。记得根据你的具体需求来定制异常处理逻辑和错误响应格式。