參考 https://blog.csdn.net/razeSpirit/article/details/78030947 的狀態碼定義
/** * PRODUCT_NAME: IntelliJ IDEA * PROJECT_NAME: ztrace * PACKAGE_NAME: com.demo * AUTHOR: Choj * DATE: 2018-08-13 10:32 * NAME: IExceptionEnum * TODO: 狀態碼 **/ public interface IExceptionEnum { /** * 獲取狀態碼 * * @return 狀態碼 */ public String getCode(); /** * 獲取提示信息 * * @return 提示信息 */ public String getMessage(); }
/**
* PRODUCT_NAME: IntelliJ IDEA
* PROJECT_NAME: ztrace
* PACKAGE_NAME: com.demo
* AUTHOR: Choj
* DATE: 2018-08-13 10:33
* NAME: ExceptionEnum
* TODO: 自定義異常
**/
public enum ExceptionEnum implements IExceptionEnum {
/**
* 正確的請求返回正確的結果
*/
_200("200", "請求成功"),
/**
* 表示資源被正確的創建。比如說,我們 POST 用戶名、密碼正確創建了一個用戶就可以返回 201。
*/
_201("201", "資源被正確的創建"),
/**
* 請求是正確的,但是結果正在處理中,沒法返回對應的結果。比如說,我們請求一個需要大量計算的結果,但是並沒有計算結束時,可以返回這個,這時候客戶端可以通過輪詢等機制繼續請求。
*/
_202("202", "結果正在處理中"),
/**
* 請求的代理服務器修改了源服務器返回的 200 中的內容,一般用不到。比如說,我們通過代理服務器向服務器 A 請求用戶信息,服務器 A 正常響應,但代理服務器命中了緩存並返回了自己的緩存內容,這時候它返回 203 告訴我們這部分信息不一定是最新的,我們可以自行判斷並處理。
*/
_203("203", "返回緩存內容"),
/**
* 請求正確,但是沒有需要返回的內容。比如說,我們請求刪除某個用戶,刪除成功可以返回 204。
*/
_204("204", "請求成功,但是沒有需要返回的內容"),
/**
* 類似 204,但是要求請求者重置視圖,一般也用不到。比如說,我們請求刪除某個用戶,服務器返回 205的話,我們就刷新現在的用戶列表。
*/
_205("205", "請求成功,重新請求獲取最新內容"),
/**
* 請求成功,但根據請求頭只返回了部分內容。比如說,我們下載一部片,共有 10部分,我們把請求也分成了 10次(防止一次請求過大),這時候服務器就可以返回 206並在其頭部告訴我們這是哪一部分,然後再根據這個信息進行拼裝。
*/
_206("206", "請求成功,只返回了部分內容"),
/**
* 請求成功,但結果有多種選擇。比如說,我們下載一部片,服務器有 avi、mp4 等格式,這時候可以返回 300,並在 body裏告知有哪些格式,然後用戶可以根據這些格式再次請求。
*/
_300("300", "請求成功,根據返回內容選擇"),
/**
* 請求成功,但是資源被永久轉移。比如說,我們要下載葫蘆娃,但是由於舊的存儲服務商漲價了,現在要使用新的存儲服務了,要去新地址下載,這時候可以返回 301,並在 header的 Location中告知新的地址,以後也應當到這個地址下載。
*/
_301("301", "請求成功,但是資源被永久轉移"),
/**
* 請求成功,但是資源被臨時轉移了。和 301不同的是, 除非是 HEAD請求,否則新地址的信息應當在 body中返回,並且資源只是臨時轉移,以後不應當通過新地址來下載。
*/
_302("302", "請求成功,但是資源被臨時轉移"),
/**
* 類似 302, 但要求使用 GET 來訪問新的地址來獲取資源。
*/
_303("303", "請求成功,GET來訪問新的地址來獲取資源"),
/**
* 請求的資源並沒有被修改過。比如說,我們發送請求想看看 5.20後的情侶信息,服務器查詢沒有新的情侶信息產生,這時候可以返回 304,然後客戶端可以繼續用舊的數據。
*/
_304("304", "請求成功,請求的資源並沒有被修改過"),
/**
* 請求的資源必須通過代理訪問。比如說,我們想請求服務器 A 上新的 iPhone 的信息,但是需要通過代理服務器才能訪問, 如果直接請求了服務器 A,沒有經過代理服務器,這時候服務器 A 就可以返回 305從而告訴我們應當訪問代理服務器。
*/
_305("305", "請求成功,請求的資源必須通過代理訪問"),
/**
* 不用了
*/
_306("306", "請求成功,不用了"),
/**
* 類似 302,但要求使用原有的請求方式來通過新地址獲取資源。
*/
_307("307", "請求成功,使用原有的請求方式來通過新地址獲取資源"),
/**
* 類似 301,但要求使用原有的請求方式來通過新地址獲取資源。
*/
_308("308", "請求成功,使用原有的請求方式來通過新地址獲取資源"),
/**
* 請求出現錯誤,比如請求頭不對等,所有不想明確區分的客戶端請求出錯都可以返回 400。
*/
_400("400", "請求出現錯誤"),
/**
* 沒有提供認證信息。比如說, 請求的時候沒有帶上 Token 等。
*/
_401("401", "沒有提供認證信息"),
/**
* 爲將來的需要所保留的狀態碼
*/
_402("402", "爲將來的需要所保留的狀態碼"),
/**
* 請求的資源不允許訪問。比如說, 你使用普通用戶的 Token 去請求管理員才能訪問的資源。
*/
_403("403", "請求的資源不允許訪問"),
/**
* 請求的內容不存在
*/
_404("404", "請求的內容不存在"),
/**
* 請求的方法不允許使用。比如說, 服務器只實現了 PATCH 了局部更新資源,並沒有實現 PUT來替換資源, 而我們使用了 PUT,這時候服務器可以返回 405 來告知並沒有實現對 PUT 的相關處理。
*/
_405("405", "請求的方法不允許使用"),
/**
* 請求的資源並不符合要求。比如說, 我們 header 裏請求 JSON 格式的數據, 但是服務器只有 XML 格式的數據,這時候可以返回 406告知。
*/
_406("406", "請求的資源並不符合要求"),
/**
* 類似 401,但是要求必須去同代理服務器進行認證。
*/
_407("407", "必須去同代理服務器進行認證"),
/**
* 客戶端請求超時。我們想 POST\創建一個用戶,雖然建立了連接,但是網絡不好,服務器在規定時間內沒有得到我們的請求信息,這時候服務器可以返回 408告訴我們超時了。然後我們可以重新發送請求。
*/
_408("408", "客戶端請求超時"),
/**
* 請求衝突。比如說,服務器要求不同用戶不能重名,服務器已經有了一個名叫小偉的用戶,這時候我們又想創建一個名叫小偉的用戶,服務器可以返回 409,告訴我們衝突了,也可以在 body 中明確告知是什麼衝突了。
*/
_409("409", "請求衝突"),
/**
* 請求資源曾經存在,但現在不存在了。比如說,我們下載葫蘆娃,但是因爲版權被刪了,下載不了了,這時候服務器返回 410,告訴我們洗洗早點睡。
*/
_410("410", "請求衝突"),
/**
* 沒有提供請求資源的長度。比如說,我們下載葫蘆娃,服務器只允許我們分部分下載,我們如果不告訴服務器我們要下載哪部分,服務器就返回 411警告我們。
*/
_411("411", "沒有提供請求資源的長度"),
/**
* 請求的資源不符合請求頭中的 IF-*的某些條件。比如說,我們下載葫蘆娃,然後在請求頭告知服務器要 5.20後更新過的,服務器沒有,於是返回了 412。
*/
_412("412", "請求的資源不符合請求頭中的IF-*的某些條件"),
/**
* 請求體過大。比如說,服務器要求上傳文件不能超過 5M, 但是我們 POST 了 10M,這時候就返回 413。
*/
_413("413", "請求體過大"),
/**
* 請求的 URI 太長了。比如說, 我們提供了太多的 Query 參數,以至於超過了服務器的限制,這時候可以返回 414。
*/
_414("414", "請求的 URI 太長了"),
/**
* 不支持的媒體類型。比如說, 我們上傳了一張七娃的 GIF 動圖, 而服務器只允許你上傳 PNG 圖片,這時候就返回 415。
*/
_415("415", "不支持的媒體類型"),
/**
* 請求的區間無效。比如說,我們分部分下載時請求葫蘆娃的 10分鐘到 12分鐘的內容,但是這部葫蘆娃只有 1分鐘的內容,這時候就返回 416。
*/
_416("416", "請求的區間無效"),
/**
* 預期錯誤。指服務器沒法滿足我們在請求頭裏的 Expect 相關的信息。
*/
_417("417", "預期錯誤"),
/**
* 不需要的狀態碼
*/
_418("418", "不需要的狀態碼"),
/**
* 服務器錯誤。沒法明確定義的服務器錯誤都可以返回這個。
*/
_500("500", "服務器錯誤"),
/**
* 請求還沒有被實現。比如說,我們請求一個接口來自動拒絕項目經理的要求,但是這個接口只是美好的想象,並沒有被實現,這時候可以返回 501。
*/
_501("501", "請求還沒有被實現"),
/**
* 網關錯誤。比如說,我們向服務器 A 請求下載葫蘆娃,但是 A 其實只是一個代理服務器,他得向 B 請求葫蘆娃,但是不知道爲啥 B 不理他或者給他錯誤,這時候哦可以 A 返回 502 用來表示 B 這傢伙傲嬌了。
*/
_502("502", "網關錯誤"),
/**
* 服務暫時不可用。比如說,服務器正好在更新代碼重啓。
*/
_503("503", "服務暫時不可用"),
/**
* 類似 502, 但是這時候是 B 不理 A,超時了 。
*/
_504("504", "服務暫時不可用"),
/**
* 請求的 HTTP 版本不支持。比如說, 現在強行根據 HTTP 1000來請求。;
*/
_505("505", "服務暫時不可用");/**
* 狀態碼
*/
private String code;
/**
* 提示信息
*/
private String message;/**
* 構造函數
*
* @param code 狀態碼
* @param message 提示信息
*/
ExceptionEnum(String code, String message) {
this.code = code;
this.message = message;
}/**
* 獲取狀態碼
*
* @return 狀態碼
*/
@Override
public String getCode() {
return this.code;
}/**
* 獲取提示信息
*
* @return 提示信息
*/
@Override
public String getMessage() {
return this.message;
}
}