樓主自己寫的一個錯誤資訊捕獲機制,是一個簡單的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異常捕獲處理、資料庫操作錯誤捕獲等……