在 Spring Boot 中,你可以使用 `@ControllerAdvice` + `@ExceptionHandler` 注解来实现全局异常处理。`@ControllerAdvice` 注解用于定义异常处理器,`@ExceptionHandler` 注解用于定义处理异常的方法。一个异常处理器可以处理多个异常,也可以为每种异常定义不同的处理方法。
以下是一个简单的全局异常处理器的示例:
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity handleException(Exception e) { // 定义处理异常的逻辑 String errorMsg = "出错啦!请稍后再试。"; return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorMsg); } }
上述代码定义了一个全局异常处理器,可以处理所有异常。当 Spring Boot 应用程序抛出异常时,将被这个处理器捕获,并调用 `handleException` 方法来处理。该方法会返回一个包含错误消息的 HTTP 响应体。
需要注意的是,`@ControllerAdvice` 注解一般需要定义在一个单独的类中,而不是在控制器类中。
如果你需要为不同类型的异常定义不同的处理方法,可以在 `@ExceptionHandler` 注解中指定异常类型。例如:
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(RuntimeException.class) public ResponseEntity handleRuntimeException(RuntimeException e) { // 处理 RuntimeException 异常 String errorMsg = "出错啦!"; return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorMsg); } @ExceptionHandler(MyException.class) public ResponseEntity handleMyException(MyException e) { // 处理 MyException 异常 String errorMsg = "自定义异常:" + e.getMessage(); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorMsg); } }
在上述代码中,定义了两个异常处理方法。`handleRuntimeException` 方法处理 `RuntimeException` 类型的异常,而 `handleMyException` 方法处理 `MyException` 类型的异常。根据抛出的异常类型,Spring Boot 将选择相应的方法来处理异常。