@RestController
@ControllerAdvice //异常处理管理
public class GlobalExceptionHandler {
private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
private static final String br = " ";
@ExceptionHandler(value = MethodArgumentNotValidException.class) // 注解异常捕捉
@ResponseBody
public AjaxResponse baseErrorHandler(HttpServletRequest req, MethodArgumentNotValidException e) throws Exception {
logger.error("---MethodArgumentNotValidException Handler---MethodArgumentNotValidException Host {} invokes url {} ERROR: {}", req.getRemoteHost(), req.getRequestURL(), e.getMessage());
BindingResult bindingResult = e.getBindingResult();
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
StringBuilder errMsgs = new StringBuilder();
for (FieldError fieldError : fieldErrors) {
String defaultMessage = fieldError.getDefaultMessage();
errMsgs.append(defaultMessage).append(br);
}
return new AjaxResponse(false, errMsgs.toString(), ErrorEnum.PARAM_NOT_VALID_ERROR.getCode());
}
@ExceptionHandler(value = AcRTException.class) // 自定义异常捕捉
@ResponseBody
public AjaxResponse acExceptionHandler(HttpServletRequest req, AcRTException e) throws Exception {
logger.error("---AcRTException Handler---AcRTException Host {} invokes url {} ERROR: {}", req.getRemoteHost(), req.getRequestURL(), JsonLogUtil.formatEx(e));
return new AjaxResponse(false, e.getMessage(), e.getErrCode());
}
@ExceptionHandler(value = AccessDeniedException.class)
@ResponseBody
public AjaxResponse exceptionHandler(HttpServletRequest req, AccessDeniedException e) throws Exception {
logger.error("---Exception Handler---Exception Host {} invokes url {} ERROR: {}", req.getRemoteHost(), req.getRequestURL(), JsonLogUtil.formatEx(e));
return new AjaxResponse(false, e.getMessage(), ErrorEnum.SYSTEM_ERROR.getCode());
}
@ExceptionHandler(value = Exception.class)
@ResponseBody
public AjaxResponse exceptionHandler(HttpServletRequest req, Exception e) throws Exception {
logger.error("---Exception Handler---Exception Host {} invokes url {} ERROR: {}", req.getRemoteHost(), req.getRequestURL(), JsonLogUtil.formatEx(e));
return new AjaxResponse(false, "系统异常,请联系管理员!", ErrorEnum.SYSTEM_ERROR.getCode());
}
private boolean isAjaxRequest(HttpServletRequest req) {
String requestedWith = req.getHeader("X-Requested-With");
boolean isAjaxRequest = requestedWith != null ? "XMLHttpRequest".equals(requestedWith) : false;
return isAjaxRequest;
}
}
自定义异常
public class AcRTException extends RuntimeException {
private ErrorEnum errCode;
private Object[] msgArgs;
public AcRTException() {
super();
}
public AcRTException(ErrorEnum errCode, Object... msgArgs) {
super(LspGenericTokenParser.parse1(errCode.getMessage(), msgArgs));
this.msgArgs = msgArgs;
this.errCode = errCode;
}
public AcRTException(ErrorEnum errCode, Throwable cause, Object... msgArgs) {
super(LspGenericTokenParser.parse1(errCode.getMessage(), msgArgs), cause);
this.errCode = errCode;
}
public int getErrCode() {
return errCode.getCode();
}
public Object[] getMsgArgs() {
return msgArgs;
}
}
返回方法
public class AjaxResponse {
private Boolean success = true;
private String message = "";
private int errCode;
private Object data;
public AjaxResponse() {
}
public AjaxResponse(Boolean success, String message, int errCode, Object data) {
this.success = success;
this.message = message;
this.errCode = errCode;
this.data = data;
}
public AjaxResponse(Boolean success, Object data) {
this.success = success;
this.message = this.message;
this.errCode = this.errCode;
this.data = data;
}
public AjaxResponse(Boolean success, String message) {
this.success = success;
this.message = message;
this.errCode = this.errCode;
this.data = this.data;
}
public AjaxResponse(Boolean success, String message, int errCode) {
this.success = success;
this.message = message;
this.errCode = errCode;
this.data = this.data;
}
public int getErrCode() {
return this.errCode;
}
public void setErrCode(int errCode) {
this.errCode = errCode;
}
public Boolean getSuccess() {
return this.success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public String getMessage() {
return this.message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return this.data;
}
public void setData(Object data) {
this.data = data;
}
}