1.使用@RestControllerAdvice来处理全局异常
@RestControllerAdvice(annotations = RestController.class)
public class GlobalExceptionHandlerAdvice {
@ExceptionHandler(ServiceException.class)
@ResponseBody
public GeneralResult serviceException(ServiceException e, HttpServletRequest request, HandlerMethod handlerMethod) {
GeneralResult generalResult = new GeneralResult();
generalResult.setErrorCode(e.getErrorCode());
generalResult.setErrorMessage(e.getMessage());
generalResult.setStatus(false);
return generalResult;
}
@ExceptionHandler(Exception.class)
@ResponseBody
public GeneralResult exception(Exception e, HttpServletRequest request, HandlerMethod handlerMethod) {
GeneralResult generalResult = new GeneralResult();
generalResult.setErr(ErrorCode.OPERATION_FAIL);
return generalResult;
}
}
2.错误码枚举类型
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public enum ErrorCode
{
OK("200", "请求成功"),
CREATE_OBJECT_FAIL("11001","交易所对象实例化失败"),
EXCHANGE_INIT_FAIL("11002","交易所初始化失败"),
OPERATION_FAIL("11003","操作失败"),
API_EXPIRED("11004","api无效"),
NOT_SUPPORT_CHANGE_LEVER("11005","不支持修改杠杆倍数"),
NOT_SUPPORT_QUERY_POSITION("11006","不支持查询仓位"),
NOT_SUPPORT_QUERY_LEVER("11007","不支持查询杠杆倍数"),
INVALID_REQ_PARAMS("11500", "请求参数不合法"),
LIMIT_PARAMS_ERROR("11501","限价单请求参数错误"),
MARKET_PARAMS_ERROR("11502","市价单请求参数错误"),
LIMIT_SPOT_FOK_PARAM_ERROR("11503","止盈止损请求参数错误"),
NOT_SUPPORT_TYPE("11504","不支持该类型参数"),
PUBLIC_KEY_ERROR("11505","公钥错误"),
INSUFFICIENT_BALANCE("11604","可用余额不足"),
TRANSACTION_AMOUNT_IS_LESS_THAN_MINIMUM("11605","交易金额小于最小交易值"),
PAIR_NOT_EXSIT("11607","交易对不存在"),
ORDER_FAIL("11606","下单失败"),
TOTAL_AMOUNT_SHOULD_THAN_ZERO("11608","下单数量必须大于零"),
TRADE_PRICE_BIT_LIMIT ("11609","交易价格小数位数超过限制"),
TRADE_AMOUNT_BIT_LIMIT("11610","交易数量小数位数超过限制"),
ORDER_NOT_EXSIT("11611","订单不存在"),
ORDER_CANCELING("11612","订单已撤销或者撤销中"),
ORDER_FINISHED("11613","订单已完成交易"),
QUERY_ORDER_FAIL("11614","查询订单失败"),
NOT_SUPPORTED_TRIGGER("11614","不支持立即触发的订单"),
CHANGE_LEVERAGE_FAIL("11615","修改杠杆倍数失败"),
CANCEL_ORDER_FAIL("11617","撤单失败"),
PALACE_ORDER_FAIL("11618","下单失败"),
QUERY_UNFINISH_ORDER_FAIL("11619","查询委托单失败"),
QUERY_HISTORY_ORDER_FAIL("11620","查询历史订单失败"),
QUERY_POSITION_FAIL("11621","查询仓位失败"),
QUERY_CONTACT_ACCOUNT_FAIL("11622","获取合约账户信息失败"),
ORDER_PRECISION_ERROR("11623","下单精度不正确"),
ORDER_VAULE_THAN_LESS_FIVE("11624","订单的名义价值不可以小于5"),
ORDER_AMOUNT_THAN_MAX("11625","数量大于最大值"),
;
private String code;
private String msg;
}
3.返回值定义
public class GeneralResult
{
// 结果状态, true 成功 false 失败
private boolean status = true
// 如果错误则返回 错误代码
private String errorCode
// 错误详情描述
private String errorMessage
// 结果为true时的 业务数据,可为空
private Object resultData
public GeneralResult(){
this.errorCode = ErrorCode.OK.getCode()
this.errorMessage = ErrorCode.OK.getMsg()
}
public GeneralResult(ErrorCode error){
this.status = false
this.errorCode = error.getCode()
this.errorMessage = error.getMsg()
}
public GeneralResult(ErrorCode error,Object obj){
this.status = false
this.errorCode = error.getCode()
this.errorMessage = error.getMsg()
this.resultData = obj
}
public GeneralResult(boolean status, String errorCode, String errorMessage)
{
super()
this.status = status
this.errorCode = errorCode
this.errorMessage = errorMessage
}
/**
* 返回status属性
* @return status属性
*/
public boolean isStatus()
{
return status
}
/**
* 设置status属性
* @param status status属性
*/
public void setStatus(boolean status)
{
this.status = status
}
public String getErrorCode() {
return errorCode
}
public void setErrorCode(String errCode) {
this.errorCode = errCode
}
public String getErrorMessage() {
return errorMessage
}
public void setErrorMessage(String errMsg) {
this.errorMessage= errMsg
}
public Object getResultData() {
return resultData
}
public void setResultData(Object resultData) {
this.resultData = resultData
this.status = true
}
public void setErr(ErrorCode errCode) {
this.errorCode = errCode.getCode()
this.errorMessage = errCode.getMsg()
this.status = false
}
}
4.自定义异常
@Getter
public class ServiceException extends RuntimeException {
private static final long serialVersionUID = -6729902095681669366L;
private String errorCode = "500";
private String message;
private Object errorData;
public ServiceException(String errorCode, String message) {
super(message);
this.errorCode = errorCode;
this.message = message;
}
public ServiceException(String errorCode, String message, Object errorData) {
super(message);
this.errorCode = errorCode;
this.message = message;
this.errorData = errorData;
}
public ServiceException(String message) {
super(message);
this.message = message;
}
public ServiceException(ErrorCode error) {
this(error.getCode(), error.getMsg());
}
}