---------------------持续更新,会慢一些--------------------
一、接口响应统一定义
成功响应和失败响应可横向扩展。
import lombok.Data;
/**
* http统一响应
*
* @Author: John Smith
* @Date: 2022/4/23
*/
@Data
public class HttpResult<T> {
/**
* 是否成功
*/
private boolean isSuccess;
/**
* 结果码
*/
private String resultCode;
/**
* 结果描述
*/
private String resultMsg;
/**
* 返回结果
*/
private T resultData;
private HttpResult(){
}
private HttpResult(String resultCode, String resultMsg, T resultData, boolean isSuccess) {
this.resultCode = resultCode;
this.resultMsg = resultMsg;
this.resultData = resultData;
this.isSuccess = isSuccess;
}
/**
* 构造失败结果
*
* @param resultCode
* @param resultMsg
* @return
* @param <T>
*/
public static <T> HttpResult<T> fail(String resultCode, String resultMsg) {
return new HttpResult<>(resultCode, resultMsg, null, false);
}
/**
* 构造成功结果
*
* @param data
* @param resultMsg
* @return
* @param <T>
*/
public static <T> HttpResult<T> success(T data, String resultMsg) {
return new HttpResult<T>(ResultCodeEnum.SUCCESS.getCode(), resultMsg, data, true);
}
}
二、结果码枚举类
同样,可扩展。
/**
* 结果码接口
*
* @Author: John Smith
* @Date: 2022/4/23
*/
public interface ResultCode {
/**
* 获取code
*
* @return
*/
String getCode();
/**
* 获取错误信息
* @return
*/
String getMsg();
/**
* 获取name
* @return
*/
String getName();
}
import lombok.Getter;
/**
* 结果码枚举类
*
* @Author: John Smith
* @Date: 2022/4/23
*/
@Getter
public enum ResultCodeEnum implements ResultCode {
SUCCESS("SUCCESS", 10000, "成功"),
PARAM_ERROR("PARAM_ERROR",7001,"参数错误");
/**
* 结果码
*/
private final String code;
/**
* 内部结果码
*/
private Integer subCode;
/**
* 描述
*/
private final String msg;
ResultCodeEnum(String code, Integer subCode, String msg) {
this.code = code;
this.subCode = subCode;
this.msg = msg;
}
@Override
public String getCode() {
return code;
}
@Override
public String getMsg() {
return msg;
}
@Override
public String getName() {
return name();
}
public static ResultCodeEnum getByCode(String code) {
for (ResultCodeEnum errorCodeEnum : ResultCodeEnum.values()) {
if (errorCodeEnum.getCode().equals(code)) {
return errorCodeEnum;
}
}
return null;
}
}
三、自定义异常
定义通用异常类后,可根据不同层级定义该层级的异常类。
import lombok.Getter;
/**
* 通用异常类定义
*
* @Author: John Smith
* @Date: 2022/4/23
*/
@Getter
public class CommonException extends RuntimeException{
/**
* 结果码
*/
private String code;
/**
* 结果信息
*/
private String msg;
/**
* 参数
*/
private String[] params;
public CommonException(ResultCode resultCode) {
super(resultCode.getMsg());
this.code = resultCode.getCode();
this.msg = resultCode.getMsg();
}
public CommonException(ResultCode resultCode, String msg) {
super(msg);
this.code = resultCode.getCode();
this.msg = msg;
}
public CommonException(ResultCode resultCode, String[] params) {
super(resultCode.getMsg());
this.code = resultCode.getCode();
this.msg = resultCode.getMsg();
this.params = params;
}
public CommonException(ResultCode resultCode, String msg, String[] params) {
super(msg);
this.code = resultCode.getCode();
this.msg = msg;
this.params = params;
}
public CommonException(ResultCode resultCode, Throwable throwable) {
super(resultCode.getMsg(), throwable);
this.code = resultCode.getCode();
this.msg = resultCode.getMsg();
}
public CommonException(ResultCode resultCode, Throwable throwable, String[] params) {
super(resultCode.getMsg(), throwable);
this.code = resultCode.getCode();
this.msg = resultCode.getMsg();
this.params = params;
}
public CommonException(ResultCode resultCode, Throwable throwable, String msg) {
super(msg, throwable);
this.code = resultCode.getCode();
this.msg = msg;
}
public CommonException(ResultCode resultCode, Throwable throwable, String msg, String[] params) {
super(msg, throwable);
this.code = resultCode.getCode();
this.msg = msg;
this.params = params;
}
@Override
public String toString() {
return String.format("[%s] %s: %s", getClass().getName(), getCode(), getMsg());
}
}
/**
* 独立异常类定义
*
* @Author: John Smith
* @Date: 2022/4/23
*/
public class BizException extends CommonException{
public BizException(ResultCode resultCode) {
super(resultCode);
}
public BizException(ResultCode resultCode, String msg) {
super(resultCode, msg);
}
public BizException(ResultCode resultCode, Throwable throwable) {
super(resultCode, throwable);
}
}