2024-01-02 10:16:15 +08:00
|
|
|
package com.realtime.protection.configuration.exception;
|
|
|
|
|
|
2024-01-03 09:13:22 +08:00
|
|
|
import cn.dev33.satoken.exception.NotLoginException;
|
2024-01-03 22:53:02 +08:00
|
|
|
import cn.dev33.satoken.exception.SaTokenException;
|
2024-01-02 10:16:15 +08:00
|
|
|
import com.realtime.protection.configuration.response.ResponseResult;
|
2024-01-11 19:49:07 +08:00
|
|
|
import com.realtime.protection.configuration.utils.enums.StateEnum;
|
|
|
|
|
import com.realtime.protection.server.task.status.StateChangeService;
|
2024-01-12 14:31:34 +08:00
|
|
|
import lombok.extern.slf4j.Slf4j;
|
2024-01-03 09:13:22 +08:00
|
|
|
import org.apache.ibatis.exceptions.PersistenceException;
|
|
|
|
|
import org.springframework.context.support.DefaultMessageSourceResolvable;
|
|
|
|
|
import org.springframework.core.annotation.Order;
|
2024-01-12 19:24:19 +08:00
|
|
|
import org.springframework.dao.DuplicateKeyException;
|
2024-01-03 09:13:22 +08:00
|
|
|
import org.springframework.web.bind.MethodArgumentNotValidException;
|
2024-01-02 10:16:15 +08:00
|
|
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
|
|
|
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
2024-01-05 09:32:19 +08:00
|
|
|
import org.springframework.web.method.annotation.HandlerMethodValidationException;
|
2024-01-02 10:16:15 +08:00
|
|
|
|
2024-01-03 09:13:22 +08:00
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
2024-01-02 10:16:15 +08:00
|
|
|
@RestControllerAdvice
|
2024-01-12 14:31:34 +08:00
|
|
|
@Slf4j
|
2024-01-02 10:16:15 +08:00
|
|
|
public class GlobalExceptionHandler {
|
|
|
|
|
|
2024-01-11 19:49:07 +08:00
|
|
|
private final StateChangeService stateChangeService;
|
|
|
|
|
|
|
|
|
|
public GlobalExceptionHandler(StateChangeService stateChangeService) {
|
|
|
|
|
this.stateChangeService = stateChangeService;
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-03 09:13:22 +08:00
|
|
|
@Order(3)
|
2024-01-12 19:24:19 +08:00
|
|
|
@ExceptionHandler(value = {Exception.class})
|
2024-01-02 10:16:15 +08:00
|
|
|
public ResponseResult handleGlobalException(Exception e) {
|
2024-01-12 14:31:34 +08:00
|
|
|
log.error("meets global exception: " + e.getMessage());
|
2024-01-03 09:13:22 +08:00
|
|
|
return ResponseResult.error().setMessage(e.getMessage());
|
|
|
|
|
}
|
2024-01-02 10:16:15 +08:00
|
|
|
|
|
|
|
|
|
2024-01-03 09:13:22 +08:00
|
|
|
@Order(2)
|
2024-01-12 19:24:19 +08:00
|
|
|
@ExceptionHandler(value = {PersistenceException.class})
|
2024-01-03 22:53:02 +08:00
|
|
|
public ResponseResult handleSQLException(PersistenceException e) {
|
2024-01-12 14:31:34 +08:00
|
|
|
log.error("meets database exception: " + e.getMessage());
|
2024-01-03 22:53:02 +08:00
|
|
|
return ResponseResult.invalid().setMessage(
|
2024-01-03 09:13:22 +08:00
|
|
|
"please check the integrity of the data. check if the json data exists in the database");
|
|
|
|
|
}
|
2024-01-02 10:16:15 +08:00
|
|
|
|
2024-01-12 19:24:19 +08:00
|
|
|
@Order(2)
|
|
|
|
|
@ExceptionHandler(value = DuplicateKeyException.class)
|
|
|
|
|
public ResponseResult handleDuplicateKeyException(DuplicateKeyException e) {
|
|
|
|
|
log.debug("meets duplicate key exception: " + e.getMessage());
|
|
|
|
|
return ResponseResult.invalid().setMessage("duplicate key in json data");
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-03 09:13:22 +08:00
|
|
|
@Order(2)
|
|
|
|
|
@ExceptionHandler(value = MethodArgumentNotValidException.class)
|
|
|
|
|
public ResponseResult handleBindException(MethodArgumentNotValidException e) {
|
2024-01-12 14:31:34 +08:00
|
|
|
log.debug("meets data bind exception: " + e.getMessage());
|
2024-01-03 22:53:02 +08:00
|
|
|
return ResponseResult.invalid().setMessage(
|
2024-01-03 09:13:22 +08:00
|
|
|
e.getBindingResult().getAllErrors().stream()
|
|
|
|
|
.map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining())
|
|
|
|
|
);
|
2024-01-02 10:16:15 +08:00
|
|
|
}
|
2024-01-03 22:53:02 +08:00
|
|
|
|
2024-01-05 09:32:19 +08:00
|
|
|
@Order(2)
|
2024-01-11 19:49:07 +08:00
|
|
|
@ExceptionHandler(value = {
|
|
|
|
|
HandlerMethodValidationException.class,
|
|
|
|
|
IllegalArgumentException.class,
|
|
|
|
|
IllegalStateException.class
|
|
|
|
|
})
|
|
|
|
|
public ResponseResult handleHandlerMethodValidationException(Exception e) {
|
2024-01-12 14:31:34 +08:00
|
|
|
log.debug("meets illegal argument exception: " + e.getMessage());
|
2024-01-05 09:32:19 +08:00
|
|
|
return ResponseResult.invalid().setMessage(e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-11 19:49:07 +08:00
|
|
|
@Order(2)
|
|
|
|
|
@ExceptionHandler(value = NotLoginException.class)
|
|
|
|
|
public ResponseResult handleNotLoginException(NotLoginException e) {
|
2024-01-12 14:31:34 +08:00
|
|
|
log.debug("meets not login exception, login type: " + e.getLoginType());
|
2024-01-11 19:49:07 +08:00
|
|
|
return new ResponseResult(
|
|
|
|
|
401,
|
|
|
|
|
e.getMessage()
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-03 22:53:02 +08:00
|
|
|
@Order(2)
|
|
|
|
|
@ExceptionHandler(value = SaTokenException.class)
|
|
|
|
|
public ResponseResult handleSaTokenException(SaTokenException e) {
|
2024-01-12 14:31:34 +08:00
|
|
|
log.debug("sa-token meets exception: " + e.getMessage());
|
2024-01-03 22:53:02 +08:00
|
|
|
return ResponseResult.unAuthorized().setMessage(e.getMessage());
|
|
|
|
|
}
|
2024-01-11 19:49:07 +08:00
|
|
|
|
|
|
|
|
@Order(2)
|
|
|
|
|
@ExceptionHandler(value = DorisStartException.class)
|
|
|
|
|
public ResponseResult handleDorisStartException(DorisStartException e) {
|
2024-01-12 14:31:34 +08:00
|
|
|
log.warn("doris database meets exception: " + e.getMessage());
|
2024-01-11 19:49:07 +08:00
|
|
|
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()));
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-12 14:31:34 +08:00
|
|
|
log.error(responseResult.getMessage());
|
2024-01-11 19:49:07 +08:00
|
|
|
return responseResult;
|
|
|
|
|
}
|
2024-01-02 10:16:15 +08:00
|
|
|
}
|