天天看點

Ajax+Json+Java 捕獲後端錯誤資訊封裝成Json字元串傳回給前端控制台顯示

樓主自己寫的一個錯誤資訊捕獲機制,是一個簡單的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傳參到後端(這裡根據你們自己的情況而定,隻要是傳參到後端即可):

Ajax+Json+Java 捕獲後端錯誤資訊封裝成Json字元串傳回給前端控制台顯示

在後端,進行參數是否為空判斷:

定義兩個變量,res為封裝錯誤資訊的對象,初始化參數為目前執行的類名(相當于給errorLocation指派),resStr用來儲存将res轉換為Json後的字元串,也是最後要傳回的字元串

Ajax+Json+Java 捕獲後端錯誤資訊封裝成Json字元串傳回給前端控制台顯示

以下為Ajax進入的方法,ResMessage為上面定義的錯誤資訊類,直接調用它的EMPTY_PARAM_ERROR獲得“入參為空”的錯誤碼和錯誤資訊,然後通過上面的JsonUtils轉換為Json字元串,Json字元串中預設有‘\’斜杠,如果你不想看這個斜杠,則可以通過replace方法删除字元串中的斜杠‘\’。

Ajax+Json+Java 捕獲後端錯誤資訊封裝成Json字元串傳回給前端控制台顯示

至此就完成了一個Damo示例,在前端F12中你将看見你的錯誤資訊被輸出。以上隻是一個簡單的Damo,主要示範了如何封裝一個錯誤資訊類和錯誤資訊傳回類,通過此方法還可以改造成Exception異常捕獲處理、資料庫操作錯誤捕獲等……