@ControllerAdvice
是 Spring 框架中的一个注解,用于全局处理控制器层的异常。它允许开发者在一个集中的地方定义异常处理逻辑,从而避免在每个控制器方法中重复编写异常处理代码。
@ExceptionHandler
注解指定处理特定类型的异常。@ControllerAdvice
和 @ExceptionHandler
可以针对特定控制器进行异常处理。@ControllerAdvice
不处理引发的异常原因分析:
@ControllerAdvice
注解。@ControllerAdvice
的类。@ExceptionHandler
方法可能没有正确指定要处理的异常类型。@ControllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleException(Exception ex) {
ErrorResponse errorResponse = new ErrorResponse(ex.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
确保 Spring 配置文件或启动类中包含了正确的包扫描路径。
@SpringBootApplication(scanBasePackages = "com.example")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(SpecificException.class)
public ResponseEntity<ErrorResponse> handleSpecificException(SpecificException ex) {
ErrorResponse errorResponse = new ErrorResponse(ex.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
}
}
如果存在多个异常处理器,可以通过 @Order
注解调整优先级。
@ControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class HighPriorityExceptionHandler {
// ...
}
假设有一个控制器抛出了一个自定义异常 CustomException
:
@RestController
public class ExampleController {
@GetMapping("/example")
public String example() throws CustomException {
throw new CustomException("This is a custom exception.");
}
}
对应的 @ControllerAdvice
处理器:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(CustomException.class)
public ResponseEntity<ErrorResponse> handleCustomException(CustomException ex) {
ErrorResponse errorResponse = new ErrorResponse(ex.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
}
}
通过以上配置,当 ExampleController
抛出 CustomException
时,GlobalExceptionHandler
将会捕获并处理该异常。
确保 @ControllerAdvice
和 @ExceptionHandler
正确配置,并且 Spring 能够扫描到相关类。通过明确指定异常类型和调整优先级,可以有效解决 @ControllerAdvice
不处理异常的问题。
领取专属 10元无门槛券
手把手带您无忧上云