Springboot全局异常捕获

使用@ControllerAdvice@ExceptionHandler

这是Spring提供的一种非常方便的方式来处理控制器层抛出的异常。你可以创建一个带有@ControllerAdvice注解的类,并在其中定义@ExceptionHandler方法来捕获和处理特定的异常。

@ControllerAdvice
public class GlobalExceptionHandler {
 
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResponseEntity<Object> handleException(Exception e) {
// 日志记录
e.printStackTrace();
// 返回错误信息
return new ResponseEntity<>("An error occurred", HttpStatus.INTERNAL_SERVER_ERROR);
}
}

 使用@RestControllerAdvice

如果你的全局异常处理器需要返回JSON格式的响应,可以使用@RestControllerAdvice注解,这样返回的对象会自动被Spring序列化为JSON。

@RestControllerAdvice
public class GlobalExceptionHandler {
 
@ExceptionHandler(value = Exception.class)
public ResponseEntity<Object> handleException(Exception e) {
// 日志记录
e.printStackTrace();
// 返回错误信息
return new ResponseEntity<>("An error occurred", HttpStatus.INTERNAL_SERVER_ERROR);
}
}

使用ResponseEntityExceptionHandler

如果你希望捕获的是REST控制器抛出的异常,而不是Spring MVC控制器抛出的异常,你可以通过继承ResponseEntityExceptionHandler类来创建一个自定义的异常处理器。这种方法更适合处理REST API中的异常。

 

@RestControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
 
@ExceptionHandler(value = Exception.class)
protected ResponseEntity<Object> handleConflict(Exception ex) {
// 日志记录
ex.printStackTrace();
// 返回错误信息
return new ResponseEntity<>("An error occurred", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
 

使用@ExceptionHandler在具体控制器中处理异常

虽然这种方法不是全局的,但它可以在单个控制器或一组控制器中捕获和处理异常。这对于特定场景下的异常处理很有用。例如:

@RestControllerAdvice(basePackages = "com.example") // 指定包路径,可选
public class SpecificExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class) // 捕获特定异常类型,例如参数验证失败异常
public ResponseEntity<Object> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
// 日志记录或返回错误信息等处理逻辑...
return new ResponseEntity<>("Validation failed", HttpStatus.BAD_REQUEST); // 返回400 Bad Request状态码和错误信息。
}
}
posted @ 2025-07-29 21:18  KLAPT  阅读(26)  评论(0)    收藏  举报