清除无需要的

This commit is contained in:
蒲先生 2025-05-30 16:57:03 +08:00
parent db95a112bc
commit 1d8a1f6eb9

View File

@ -1,183 +0,0 @@
package com.casic.machine.handler;
import com.casic.machine.contants.CommonConstants;
import com.casic.machine.enums.PermissionExceptionEnum;
import com.casic.machine.enums.RequestExceptionEnum;
import com.casic.machine.pojo.ErrorResponseData;
import com.casic.machine.pojo.ResponseData;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.NoHandlerFoundException;
import javax.naming.AuthenticationException;
import java.util.stream.Collectors;
@Order(-200)
@ControllerAdvice
public class GlobalExceptionHandler {
Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* 请求参数异常
*/
@ExceptionHandler(MissingServletRequestParameterException.class)
@ResponseBody
public ResponseData handleMissingParameterException(MissingServletRequestParameterException e) {
logger.error("请求参数异常{}", e.getMessage());
return renderErrorJson(
500,
String.format("缺少请求参数{%s},类型为{%s}", e.getParameterName(), e.getParameterType()),
e
);
}
/**
* 拦截参数格式传递异常
*/
@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseBody
public ResponseData handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
logger.error("参数格式传递异常{}",e.getMessage());
return renderErrorJson(
RequestExceptionEnum.REQUEST_JSON_ERROR.getCode(),
RequestExceptionEnum.REQUEST_JSON_ERROR.getMessage(),
e
);
}
/**
* 拦截不支持媒体类型异常
*/
@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
@ResponseBody
public ResponseData handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException e) {
logger.error("不支持媒体类型异常{}",e.getMessage());
return renderErrorJson(
RequestExceptionEnum.REQUEST_TYPE_NOT_JSON.getCode(),
RequestExceptionEnum.REQUEST_TYPE_NOT_JSON.getMessage(),
e
);
}
/**
* 拦截请求方法异常
*/
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
@ResponseBody
public ResponseData handleHttpRequestMethodNotSupportedException(HttpServletRequest httpServletRequest) {
if ("GET".equalsIgnoreCase(httpServletRequest.getMethod())) {
logger.error("请求方法异常{}",RequestExceptionEnum.REQUEST_METHOD_NOT_POST.getMessage());
return renderErrorJson(
RequestExceptionEnum.REQUEST_METHOD_NOT_POST.getCode(),
RequestExceptionEnum.REQUEST_METHOD_NOT_POST.getMessage(),
null
);
}
if("POST".equalsIgnoreCase(httpServletRequest.getMethod())) {
logger.error("请求方法异常{}",RequestExceptionEnum.REQUEST_METHOD_NOT_GET.getMessage());
return renderErrorJson(
RequestExceptionEnum.REQUEST_METHOD_NOT_GET.getCode(),
RequestExceptionEnum.REQUEST_METHOD_NOT_GET.getMessage(),
null
);
}
return null;
}
/**
* 拦截资源找不到的运行时异常
*/
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseBody
public ResponseData handleNoHandlerFoundException(NoHandlerFoundException e) {
logger.error("资源不存在异常{}",e.getMessage());
return renderErrorJson(
PermissionExceptionEnum.URL_NOT_EXIST.getCode(),
PermissionExceptionEnum.NO_PERMISSION.getMessage(),
e
);
}
/**
* 拦截参数校验错误异常,JSON传参
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ResponseData handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
logger.error("拦截参数校验错误异常,JSON传参{}",e.getMessage());
return renderErrorJson(
RequestExceptionEnum.PARAM_ERROR.getCode(),
getArgNotValidMessage(e.getBindingResult()),
e
);
}
/**
* 拦截认证失败异常
*/
@ExceptionHandler(AuthenticationException.class)
@ResponseBody
public ResponseData handleAuthenticationException(AuthenticationException e) {
logger.error("拦截认证失败异常{}",e.getMessage());
return renderErrorJson(
500,
e.getMessage(),
e
);
}
/*
* 渲染异常Json
*/
private ErrorResponseData renderErrorJson(int code, String msg,Throwable e) {
if (e != null) {
StackTraceElement[] stackTrace = e.getStackTrace();
//默认的异常类全路径为第一条异常堆栈信息的
String exceptionClassTotalName = stackTrace[0].toString();
//遍历所有堆栈信息找到cd.casic开头的第一条异常信息
for (StackTraceElement stackTraceElement : stackTrace) {
if (stackTraceElement.toString().contains(CommonConstants.DEFAULT_PACKAGE_NAME)) {
exceptionClassTotalName = stackTraceElement.toString();
break;
}
}
ErrorResponseData error = ResponseData.error(code, msg);
error.setExceptionClazz(exceptionClassTotalName);
return error;
}else {
return ResponseData.error(code, msg);
}
}
/**
* 获取请求参数不正确的提示信息
* 多个信息拼接成用逗号分隔的形式
*/
private String getArgNotValidMessage(BindingResult bindingResult) {
if (bindingResult == null) {
return "";
}
//多个错误用逗号分隔
return bindingResult.getAllErrors().stream()
.map(ObjectError::getDefaultMessage)
.collect(Collectors.joining(","));
}
}