package cn.yunzhixue.ability.center; import cn.yunzhixue.ability.center.kernel.BaseResponse; import cn.yunzhixue.ability.center.kernel.BusinessException; import cn.yunzhixue.ability.center.kernel.ErrorCode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; import org.springframework.validation.BindException; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.resource.NoResourceFoundException; @RestControllerAdvice public class GlobalExceptionHandler { private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(BusinessException.class) public ResponseEntity> handleBusinessException(BusinessException exception) { return ResponseEntity .status(HttpStatusCode.valueOf(exception.getErrorCode().getHttpStatusCode())) .body(BaseResponse.failure(exception.getErrorCode())); } @ExceptionHandler({ MissingServletRequestParameterException.class, MethodArgumentNotValidException.class, BindException.class, HttpMessageNotReadableException.class}) public ResponseEntity> handleValidationException(Exception exception) { return ResponseEntity .status(HttpStatusCode.valueOf(ErrorCode.VALIDATION_ERROR.getHttpStatusCode())) .body(BaseResponse.failure(ErrorCode.VALIDATION_ERROR)); } @ExceptionHandler({NoHandlerFoundException.class, NoResourceFoundException.class}) public ResponseEntity> handleNotFoundException(Exception exception) { return ResponseEntity.notFound().build(); } @ExceptionHandler(Exception.class) public ResponseEntity> handleException(Exception exception) { log.error("Unhandled exception caught by global handler", exception); return ResponseEntity .status(HttpStatusCode.valueOf(ErrorCode.INTERNAL_ERROR.getHttpStatusCode())) .body(BaseResponse.failure(ErrorCode.INTERNAL_ERROR)); } }