一、定义错误异常类
/**
* @author yunpeng.zhao
* @version $Id TestException.java, v 0.1 2018-08-01 下午1:51 yunpeng.zhao Exp $$
*/
public class TestException extends RuntimeException{
private static final long serialVersionUID = -5145296679669649729L;
/**
* 异常信息,包含必要的上下文业务信息,用于打印日志
*/
protected String message;
/**
* 具体异常码,即异常码code的后3位,由各具体异常实例化时自己定义
*/
protected String defineCode;
public TestException(String defineCode) {
super();
this.defineCode = defineCode;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getDefineCode() {
return defineCode;
}
public void setDefineCode(String defineCode) {
this.defineCode = defineCode;
}
}
二、定义错误码常量管理类
/***
* 错误码和错误信息定义类
* 1. 错误码定义规则为5为数字
* 2. 前两位表示业务场景,最后三位表示错误码。例如:100001。10:通用 001:系统未知异常
* 3. 维护错误码后需要维护错误描述
* 错误码列表:
* 10: 通用
* 001:参数格式校验
* 11:开户
* 12: 交易
* 13: 查询
* 14: 银行
*
* @author yunpeng.zhao
*
*/
public class TestErrorInfoConstants {
/**
* 错误码与错误描述
*/
protected static Map<String,String> error = new HashMap<String, String>();
public static String getErrorInfo(String defindCode) {
return error.get(defindCode);
}
/**
* 构造方法私有化
*/
private TestErrorInfoConstants(){}
/**
* 成功
*/
public static final String SUCCESS="00000";
/***********************************************以10开头COMMON START****************************************************************/
/**
*系统未知异常
*/
public static final String FAIL="10001";
/**
* 参数异常
* **/
public static final String PARAM_VALIDATE_EXCEPTION = "10002";
/**
* 请求参数转换响应参数异常
* **/
public static final String REQUEST_TO_RESPONSE_EXCEPTION = "10003";
/***************************************************************************************************************/
static{
error.put(SUCCESS, "成功");
error.put(FAIL, "系统未知异常");
error.put(PARAM_VALIDATE_EXCEPTION, "请求参数有误");
error.put(REQUEST_TO_RESPONSE_EXCEPTION, "请求参数转换响应参数异常");
}
}
三、在业务地处理过程中,抛出异常
/**
* 请求转换到响应
* @param requestDTO
* @param clazz
* @param <T>
* @param <R>
* @return
*/
public static <T,R> T covertRequestToResponse(R requestDTO,Class<T> clazz) {
try {
T response =clazz.newInstance();
BeanUtils.copyProperties(requestDTO,response);
return response;
} catch (Exception e) {
logger.info("请求参数转换到响应参数出现异常:{}",e);
throw TestException.REQUEST_TO_RESPONSE_EXCEPTION;
}
}