6 springboot全局异常处理器?
6 springboot全局异常处理器?
异常前提知识
- 异常仅在线程内部传播
- 主线程未捕获异常 → 程序终止
- 子线程未捕获异常 → 仅终止该子线程,不影响主线程和其他线程
- 非守护线程退出,jvm会立即停止,无论是否有守护线程。
解决异常处理的方式之一:
- 自定义类封装响应的格式(响应码、响应描述、响应结果数据)
- 创建全局异常处理器GlobalExceptionHandler类
自定义类封装响应的格式(响应码、响应描述、响应结果数据)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ErrorResponse {
private int status;
private String message;
private Object details;
private LocalDateTime timestamp = LocalDateTime.now();
public ErrorResponse(int status, String message, Object details) {
this.status = status;
this.message = message;
this.details = details;
}
}
创建全局异常处理器GlobalExceptionHandler类
类加@RestControllerAdvice注解,方法加@ExceptionHandler(自定义异常.class )
创建全局异常处理器
java
@RestControllerAdvice
public class GlobalExceptionHandler {
// 处理所有未捕获的异常
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleAllExceptions(Exception ex) {
ErrorResponse error = new ErrorResponse(
HttpStatus.INTERNAL_SERVER_ERROR.value(),
"服务器内部错误",
ex.getMessage()
);
return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
}
// 处理自定义业务异常
@ExceptionHandler(BusinessException.class)
public ResponseEntity<ErrorResponse> handleBusinessException(
BusinessException ex) {
ErrorResponse error = new ErrorResponse(
ex.getCode(),
ex.getMessage(),
ex.getDetails()
);
return new ResponseEntity<>(error, ex.getStatus());
}
}