1.ErrorCode.java
package com.hng.config.exception.error;
/**
* @Author: 郝南过
* @Description: TODO
* @Date: 2023/11/14 10:56
* @Version: 1.0
*/
public interface ErrorCode {
String getCode();
String getMessage();
}
2.ErrorEnum.java
package com.hng.config.exception.error;
public enum ErrorEnum implements ErrorCode {
/**
* 成功
*/
SUCCESS("SUCCESS", "成功"),
//*********************系统异常*********************//
/**
* 请求失败(外域请求等)
*/
REQUEST_FAIL("REQUEST_FAIL", "请求失败"),
/**
* 系统异常
*/
SYSTEM_ERROR("SYSTEM_ERROR", "系统异常"),
/**
* 操作超时
*/
OP_TIMEOUT("OP_TIMEOUT", "操作超时,请重试"),
/**
* 操作冲突(乐观锁、并发)
*/
OP_CONFLICT("OP_CONFLICT", "操作冲突"),
/**
* 数据库执行错误
*/
DB_ERROR("DB_ERROR", "数据库执行错误"),
//*********************业务类异常*********************//
/**
* 参数错误
*/
PARAMETER_ERROR("PARAMETER_ERROR", "参数错误"),
/**
* 没有权限
*/
NO_PRIVILEGE("NO_PRIVILEGE", "没有权限"),
/**
* 数据异常(数据校验不通过等)
*/
DATA_ERROR("DATA_ERROR", "数据异常"),
/**
* 数据不存在(数据校验等)
*/
DATA_NOT_FOUND("DATA_NOT_FOUND", "数据不存在"),
/**
* 数据已存在(数据校验等)
*/
DATA_EXIST("DATA_EXIST", "数据已存在");
/**
* 结果码
*/
private String code;
/**
* 结果信息
*/
private String message;
ErrorEnum(String code, String message) {
this.code = code;
this.message = message;
}
@Override
public String getCode() {
return this.code;
}
@Override
public String getMessage() {
return this.message;
}
}
3.BizException.java
package com.hng.config.exception;
import com.hng.config.exception.error.ErrorEnum;
import lombok.Data;
/**
* @Author: 郝南过
* @Description: TODO
* @Date: 2023/11/14 15:43
* @Version: 1.0
*/
@Data
public class BizException extends RuntimeException {
private String errorCode;
public BizException(String msg) {
super(msg);
}
public BizException(String errorCode, String msg) {
super(msg);
this.errorCode = errorCode;
}
public BizException(String errorCode,String msg,Throwable throwable) {
super(msg, throwable);
this.errorCode = errorCode;
}
public BizException(ErrorEnum errorEnum) {
super(errorEnum.getMessage());
this.errorCode = errorEnum.getCode();
}
public String getErrorCode() {
return errorCode;
}
}
4.GlobalExceptionHandler.java
package com.hng.config.exception.advice;
import com.hng.config.exception.BizException;
import com.hng.config.response.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* @Author: 郝南过
* @Description: 统一处理异常类
* @Date: 2023/11/14 15:49
* @Version: 1.0
*/
@Slf4j
@RestControllerAdvice //声明GlobalExceptionHandler作为全局异常处理类
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class) //@ExceptionHandler注解指定某个方法处理对应的错误类型,根据异常类型选择最精确的处理方法进行处理
public Result exceptionHandler(Exception e){
// 记录异常信息到日志文件
log.error("An exception occurred: ", e);
// 判断是否为自定义的异常类型
if(e instanceof BizException){
BizException bizException = (BizException)e;
return Result.Result(bizException.getErrorCode(),e.getMessage(),null);
}
return Result.Result("500",e.getMessage(),null);
}
}