Spring Boot全局异常处理器(原理及使用详解)
在Spring Boot中,可以通过@ControllerAdvice注解创建全局异常处理器,用于集中处理各种异常情况。以下是一个简单的全局异常处理器示例:
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
// 处理所有不同的异常情况
// 处理所有Exception类型的异常
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleAllExceptions(Exception ex) {
// 记录日志,处理异常信息返回给客户端等
return "An error occurred: " + ex.getMessage();
}
// 处理MethodArgumentNotValidException异常,即@Valid验证失败的异常
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {
// 记录日志,处理异常信息返回给客户端等
return new ResponseEntity<>("Validation failed: " + ex.getBindingResult().toString(), HttpStatus.BAD_REQUEST);
}
// 根据需要添加更多的异常处理方法
}
在这个示例中,我们定义了两个异常处理方法:一个用于处理所有类型的异常,另一个用于处理参数验证失败的异常(比如@RequestBody中的数据验证失败)。通过@ExceptionHandler注解指定要处理的异常类型,@ResponseStatus注解用于设置返回的HTTP状态码。
这个全局异常处理器是一个很好的实践,可以使你的控制器代码更加清晰和松耦合。当然,你可以根据项目的具体需求添加更多的异常处理逻辑。
评论已关闭