package com.realtime.protection.configuration.exception; import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.exception.SaTokenException; import com.realtime.protection.configuration.response.ResponseResult; import com.realtime.protection.configuration.utils.enums.StateEnum; import com.realtime.protection.server.task.status.StateChangeService; import org.apache.ibatis.exceptions.PersistenceException; import org.springframework.context.support.DefaultMessageSourceResolvable; import org.springframework.core.annotation.Order; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.method.annotation.HandlerMethodValidationException; import java.util.stream.Collectors; @RestControllerAdvice public class GlobalExceptionHandler { private final StateChangeService stateChangeService; public GlobalExceptionHandler(StateChangeService stateChangeService) { this.stateChangeService = stateChangeService; } @Order(3) @ExceptionHandler(value = Exception.class) public ResponseResult handleGlobalException(Exception e) { return ResponseResult.error().setMessage(e.getMessage()); } @Order(2) @ExceptionHandler(value = PersistenceException.class) public ResponseResult handleSQLException(PersistenceException e) { return ResponseResult.invalid().setMessage( "please check the integrity of the data. check if the json data exists in the database"); } @Order(2) @ExceptionHandler(value = MethodArgumentNotValidException.class) public ResponseResult handleBindException(MethodArgumentNotValidException e) { return ResponseResult.invalid().setMessage( e.getBindingResult().getAllErrors().stream() .map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining()) ); } @Order(2) @ExceptionHandler(value = { HandlerMethodValidationException.class, IllegalArgumentException.class, IllegalStateException.class }) public ResponseResult handleHandlerMethodValidationException(Exception e) { return ResponseResult.invalid().setMessage(e.getMessage()); } @Order(2) @ExceptionHandler(value = NotLoginException.class) public ResponseResult handleNotLoginException(NotLoginException e) { return new ResponseResult( 401, e.getMessage() ); } @Order(2) @ExceptionHandler(value = SaTokenException.class) public ResponseResult handleSaTokenException(SaTokenException e) { return ResponseResult.unAuthorized().setMessage(e.getMessage()); } @Order(2) @ExceptionHandler(value = DorisStartException.class) public ResponseResult handleDorisStartException(DorisStartException e) { ResponseResult responseResult = ResponseResult.error() .setMessage("Doris command creation meets error: " + e.getMessage()); try { stateChangeService.changeState(StateEnum.FAILED.getStateNum(), e.taskId); } catch (Exception another) { responseResult.setAnother(ResponseResult.error().setMessage(e.getMessage())); } return responseResult; } }