0
点赞
收藏
分享

微信扫一扫

系统自定义异常实现解决方案


文章目录

  • ​​1. 系统异常类​​
  • ​​2. 异常码​​
  • ​​3. 统一异常处理​​
  • ​​4. 响应体​​
  • ​​5. 响应码​​

1. 系统异常类

public class AiException extends RuntimeException {

@Getter
private String errorCode;
@Getter
private String errorDesc;

public AiException (String errorCode, String errorDesc) {
super(errorCode);
this.errorCode = errorCode;
this.errorDesc = errorDesc;
}

public AiException (ExceptionEnum ex, Object... args) {
super(ex.getErrorCode());
this.errorCode = ex.getErrorCode();
this.errorDesc = String.format(ex.getErrorDesc(), args);
}

}

 

2. 异常码

public enum ExceptionEnum {

/* 数据库操作类异常 */
/** 写入时异常 */
DB_INSERT_EXCEPTION("DB1001", "table[%s] reasons[%s]"),

/** 更新时异常 */
DB_UPDATE_EXCEPTION("DB2001", "table[%s] reasons[%s]"),

/** 删除时异常 */
DB_DELETE_EXCEPTION("DB3001", "table[%s] reasons[%s]"),

/** 查询时异常 */
DB_SELECT_EXCEPTION("DB4001", "table[%s] reasons[%s]"),


/* 业务类异常 */
;


/**
* 错误码
* */
@Getter
private String errorCode;

/**
* 错误描述
* */
@Getter
private String errorDesc;


ExceptionEnum(String errorCode, String errorDesc) {
this.errorCode = errorCode;
this.errorDesc = errorDesc;
}

}

 

3. 统一异常处理

@ControllerAdvice
@Slf4j
public class ExceptionHandler {

@ExceptionHandler(AiException.class)
@ResponseBody
public AiResponse exceptionHandler(AiException ex) {
log.error("errorCode[{}] errorDesc[{}]", ex.getErrorCode(), ex.getErrorDesc());

return AiResponse.failed(ex.getErrorDesc());
}



@ExceptionHandler(Exception.class)
@ResponseBody
public AiResponse exceptionHandler(Exception ex) {
log.error("exception message[{}]", ex.getMessage());

return AiResponse.failed(ex.getMessage());
}

}

 

4. 响应体

@Data
public class AiResponse<T> {
/**
* 响应码
* */
private String code;

/**
* 详细描述
* */
private String desc;

/**
* 响应数据
* */
private T data;

private AiResponse(ResponseEnum responseEnum, T data) {
this.code = responseEnum.code();
this.desc = responseEnum.desc();
this.data = data;
}

public static <T> AiResponse success(T data) {
return new AiResponse<>(ResponseEnum.SUCCESS, data);
}

public static <T> AiResponse failed(T data) {
return new AiResponse<>(ResponseEnum.FAILED, data);
}

public static <T> AiResponse failed(ResponseEnum responseEnum, T data) {
return new AiResponse<>(responseEnum, data);
}

}

 

5. 响应码

public enum ResponseEnum {
/** success */
SUCCESS("0000", "success"),

/** failed */
FAILED("0001", "failed")
;

ResponseEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}

private String code;

private String desc;

public String code() {
return code;
}

public String desc() {
return desc;
}
}


举报

相关推荐

0 条评论