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("0000", "success"),
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;
}
}