java 自定義狀態碼

參考  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;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章