@ExceptionHandler 是 Spring Framework 中的一个注解,主要用于处理控制器方法中抛出的异常。它能够捕获指定类型的异常并进行处理,通常与 @ControllerAdvice 配合使用,用来集中处理应用程序中的异常。
主要用途:
-
捕获和处理控制器层的异常:@ExceptionHandler 可以用于控制器方法上,当指定异常类型发生时,自动调用该方法进行处理。
-
全局异常处理:与 @ControllerAdvice 一起使用时,可以集中管理全局的异常处理逻辑。
语法:
@ExceptionHandler(Exception.class)
public String handleException(Exception ex) {
// 处理异常
return "error";
}
说明:
-
@ExceptionHandler 只能处理当前类中抛出的异常。如果想要全局处理,可以配合 @ControllerAdvice 使用。
-
Exception.class 表示捕获 Exception 类型的异常,可以指定具体的异常类型来捕获不同的异常。
-
该方法可以返回视图名称、错误信息或 JSON 数据,具体取决于你的需求。
示例:处理单个控制器的异常
@RestController
public class MyController {
@GetMapping("/error")
public String generateError() throws Exception {
throw new Exception("Something went wrong");
}
@ExceptionHandler(Exception.class)
public String handleException(Exception ex) {
// 打印异常信息
ex.printStackTrace();
return "error"; // 返回错误页面的视图名
}
}
示例:使用
@ControllerAdvice
处理全局异常
@ControllerAdvice 是一个用于全局异常处理的注解,可以在应用中统一处理所有控制器抛出的异常。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public String handleException(Exception ex) {
// 打印异常信息
ex.printStackTrace();
return "error"; // 返回全局错误页面的视图
}
}
适用场景:
-
输入校验失败:当用户输入不合法或请求参数错误时,抛出异常并返回友好的错误信息。
-
服务层异常:捕获服务层抛出的异常,并进行统一处理,如数据库操作异常。
-
全局异常处理:应用中的所有异常可以通过 @ControllerAdvice 和 @ExceptionHandler 进行集中管理。
总结:
-
@ExceptionHandler 用于捕获控制器方法中的异常并进行处理,可以指定具体的异常类型。
-
配合 @ControllerAdvice 使用时,可以实现全局的异常处理。
-
异常处理方法可以返回视图名称、错误信息或 JSON 数据,满足不同需求。
浙公网安备 33010602011771号