1. 简介
Spring Boot统一处理全局异常是开发中必须掌握的技能,本文将介绍Spring Boot如何统一处理全局异常。这种异常处理方式可以使我们更好地监控和维护自己的应用程序。
2. 异常处理方式
在Spring Boot中,可以通过@ControllerAdvice注解来处理全局异常。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleException(Exception exception) {
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
errorResponse.setMessage(exception.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
3. 示例说明
下面简单介绍两个示例:
示例1:自定义异常
假设我们有一个服务,当我们请求服务器时,如果服务器响应在规定的时间内没有得到返回数据,我们希望抛出一个自定义异常。
public class TimeoutException extends RuntimeException {
public TimeoutException(String message) {
super(message);
}
}
我们可以通过捕获TimeoutException来处理全局异常。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(TimeoutException.class)
public ResponseEntity<ErrorResponse> handleTimeoutException(TimeoutException timeoutException) {
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setCode(HttpStatus.REQUEST_TIMEOUT.value());
errorResponse.setMessage(timeoutException.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.REQUEST_TIMEOUT);
}
}
示例2:使用throwable
为了更好地监控和维护应用程序,我们希望能够在控制台中打印出异常的堆栈信息。我们可以使用throwable来达到这个目的。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Throwable.class)
public ResponseEntity<ErrorResponse> handleThrowable(Throwable throwable) {
throwable.printStackTrace();
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
errorResponse.setMessage("An unexpected error occurred, please try again later.");
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
4. 结论
Spring Boot统一处理全局异常的实现方式非常简单,ControllerAdvice注解的使用使得代码更加规范化,堆栈信息的打印也是我们应该掌握的技能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot统一处理全局异常的实战教程 - Python技术站