楼主自己写的一个错误信息捕获机制,是一个简单的Damo,可在其上进行修改或者扩充,能够通过后端的控制把错误信息封装成Json字符串,返回给前端的Ajax显示。首先创建一个错误信息枚举类(返回给前端的字符串),在Eclipse中依次点击 File-》new-》Enum,错误信息可以自己定义,errorCode是错误码,errorMsg是信息字符串:
public enum ResMessage {
SUCCESS("0", "成功"),
EMPTY_PARAM_ERROR("3000000","入参为空"),
PARAM_ERROR("3000005", "参数错误"),
OUTTER_ERROR("3000006", "依赖接口错误或超时"),
INTER_ERROR("3000500", "服务器内部错误"),
NO_QUESBANK_ERROR("3000501", "未查到题库信息"),
UPDATE_QUESBANK_ERROR("3000502", "更新题库失败[数据库操作]"),
CAST_CLASS_ERROR("3000503", "不能进行强制类型转换"),
NO_QUESTYPE_ERROR("3000504", "未找到相应的知识类型"),
UPDATE_QUESTYPE_ERROR("3000505", "更新知识类型失败"),
SAVE_QUESTION_ERROR("3000506", "题目保存失败[数据库操作]"),
UPDATE_QUESTION_ERROR("3000507", "题目更新失败[数据库操作]"),
DELETE_QUESTION_ERROR("3000508", "题目删除失败[数据库操作]");
private String errorCode;
private String errorMsg;
ResMessage(String errorCode,String errorMsg){
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public String getErrorCode() {
return errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
}
然后创建一个Json字符串转换类,可将对象封装成Json字符串的格式(直接复制即可):
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;
public class JsonUtils {
//定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper();
/**
* 将对象转化为json字符串
* @param data
* @return
*/
public static String ObjectToJson(Object data){
try{
String string = MAPPER.writeValueAsString(data);
return string;
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
/**
* 将json字符串转化为对象
* @param jsonData
* @param beanType
* @param <T>
* @return
*/
public static <T> T jsonToPojo(String jsonData, Class<T> beanType){
try {
T t = MAPPER.readValue(jsonData, beanType);
return t;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 将json字符串数据转化为pojo对象list
* @param jsonData
* @param beanType
* @param <T>
* @return
*/
public static <T> List<T> jsonToList(String jsonData, Class<T> beanType){
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
try {
List<T> list = MAPPER.readValue(jsonData, javaType);
return list;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
最后定义一个错误信息封装类,成员变量可以自己自定义的,这里我定义了errorMsg错误信息(对应上面的errorMsg),errorCode错误码(对应上面的errorCode),再加一个errorLocation(错误定位,表明错误在哪一个类中):
public class ResponseVo{
private String errorMsg;
private String errorCode;
private String errorLocation;
public ResponseVo(String errorLocation){
this.errorLocation = errorLocation;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorLocation() {
return errorLocation;
}
public void setErrorLocation(String errorLocation) {
this.errorLocation = errorLocation;
}
}
然后就可以进行错误的捕获了
======================================举个栗子=======================================
当传入的参数为null时,进行错误的捕获,返回给前端,告诉前端 “你传过来的这个参数是空的,我不能继续执行了!”
通过Ajax传参到后端(这里根据你们自己的情况而定,只要是传参到后端即可):
在后端,进行参数是否为空判断:
定义两个变量,res为封装错误信息的对象,初始化参数为当前执行的类名(相当于给errorLocation赋值),resStr用来保存将res转换为Json后的字符串,也是最后要返回的字符串
以下为Ajax进入的方法,ResMessage为上面定义的错误信息类,直接调用它的EMPTY_PARAM_ERROR获得“入参为空”的错误码和错误信息,然后通过上面的JsonUtils转换为Json字符串,Json字符串中默认有‘\’斜杠,如果你不想看这个斜杠,则可以通过replace方法删除字符串中的斜杠‘\’。
至此就完成了一个Damo示例,在前端F12中你将看见你的错误信息被输出。以上只是一个简单的Damo,主要演示了如何封装一个错误信息类和错误信息返回类,通过此方法还可以改造成Exception异常捕获处理、数据库操作错误捕获等……