Spring Boot 全局异常处理
一、GlobalExceptionHandler
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* @Description TODO 系统内部异常
**/
@ExceptionHandler(value = Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public Result handleException(Exception e) {
log.error("系统内部异常,异常信息:", e);
return new Result(false, "操作失败,请稍后重试或联系管理员!");
}
// 调用方式出错
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
public Result httpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
log.error("调用方法错误:", e);
return new Result(false, "调用方式错误!");
}
@ExceptionHandler(value = UnLoginException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
public Result unLoginException(UnLoginException e) {
//log.error("登录超时:", e);
return new Result(false, "登录超时,请重新登陆!");
}
@ExceptionHandler(value = PageErrorException.class)
@ResponseStatus(HttpStatus.OK)
public Result pageErrorException(PageErrorException e) {
//log.error("登录超时:", e);
return new Result(false, "分页参数不合法!");
}
@ExceptionHandler(value = LimitAccessException.class)
@ResponseStatus(HttpStatus.TOO_MANY_REQUESTS)
public Result handleLimitAccessException(LimitAccessException e) {
log.warn(e.getMessage());
return new Result(false, "请求过于频繁!");
}
@ExceptionHandler(value = UnauthorizedException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
public Result handleUnauthorizedException(Exception e) {
log.error("权限不足,", e.getMessage());
return new Result(false, "权限不足!");
}
@ExceptionHandler(value = OperationException.class)
@ResponseStatus(HttpStatus.OK)
public Result operationException(Exception e) {
log.error("操作失败,", e.getMessage());
return new Result(false, "操作失败,请稍后重试!");
}
/**
* @Description TODO 统一处理请求参数校验(实体对象传参)
**/
@ExceptionHandler(BindException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Result validExceptionHandler(BindException e) {
StringBuilder message = new StringBuilder();
List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
for (FieldError error : fieldErrors) {
//message.append(error.getField()).append(error.getDefaultMessage()).append(StringPool.COMMA);
}
message = new StringBuilder(message.substring(0, message.length() - 1));
return new Result(false, "参数有误!", message);
}
}
二、BusinessException
@Slf4j
public class BusinessException extends RuntimeException {
/**
* 异常码
*/
protected int code;
private static final long serialVersionUID = 3160241586346324994L;
public BusinessException() {
}
public BusinessException(Throwable cause) {
super(cause);
}
public BusinessException(String message) {
super(message);
}
public BusinessException(String message, Throwable cause) {
super(message, cause);
}
public BusinessException(int code, String message) {
super(message);
this.code = code;
}
public BusinessException(int code, String msgFormat, Object... args) {
super(String.format(msgFormat, args));
this.code = code;
}
public BusinessException(ErrorCodeEnum codeEnum, Object... args) {
super(String.format(codeEnum.msg(), args));
this.code = codeEnum.code();
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}