java http返回值Result 工具類


1、Result 工具類

依賴:工具類依賴lombok,HttpStatusEnum 兩個類,如果想自定義狀態碼可以修改HttpStatusEnum.java為自己的狀態碼和注釋

import lombok.Data;

/**
 * @author zhanghuiwen
 * http返回值
 */
@Data
public class Result<T> {

    public Result(boolean success, int code) {
        this.setSuccess(success);
        this.setCode(code);
    }

    public Result(boolean success, int code, T data) {
        this.setSuccess(success);
        this.setCode(code);
        this.setData(data);
    }

    public Result(boolean success, int code, String msg) {
        this.setSuccess(success);
        this.setCode(code);
        this.setData(data);
    }


    /**
     * 請求是否成功
     * true:成功
     * false:失敗
     */
    private boolean success;

    /**
     * 狀態碼
     * 成功:200
     * 失敗:其他
     */
    private int code;

    /**
     * 失敗狀態碼描述
     * 如果成功不返回
     * 失敗返回狀態碼對應的msg消息
     */
    private String msg;

    /**
     * 請求數據的結果
     */
    private T data;


    public static <T> Result<T> success() {
        return new Result<T>(true, 200);
    }

    public static <T> Result<T> success(T data) {
        return new Result<T>(true, 200, data);
    }


    public static <T> Result<T> fail(HttpStatusEnum httpStatusEnum) {
        return new Result<T>(false, httpStatusEnum.code(), httpStatusEnum.reasonPhraseUS());
    }

    public static <T> Result<T> fail(HttpStatusEnum httpStatusEnum, String msg) {
        return new Result<T>(false, httpStatusEnum.code(), msg);
    }


}

 

2、HttpStatusEnum 枚舉了所有http狀態碼
/**
 * http所有狀態碼枚舉
 */
public enum HttpStatusEnum {
    /**
     * http狀態碼枚舉所有狀態碼注解
     */
    CONTINUE(100, "Continue", "請繼續發送請求的剩余部分"),
    SWITCHING_PROTOCOLS(101, "Switching Protocols", "協議切換"),
    PROCESSING(102, "Processing", "請求將繼續執行"),
    CHECKPOINT(103, "Checkpoint", "可以預加載"),
    OK(200, "OK", "請求已經成功處理"),
    CREATED(201, "Created", "請求已經成功處理,並創建了資源"),
    ACCEPTED(202, "Accepted", "請求已經接受,等待執行"),
    NON_AUTHORITATIVE_INFORMATION(203, "Non-Authoritative Information", "請求已經成功處理,但是信息不是原始的"),
    NO_CONTENT(204, "No Content", "請求已經成功處理,沒有內容需要返回"),
    RESET_CONTENT(205, "Reset Content", "請求已經成功處理,請重置視圖"),
    PARTIAL_CONTENT(206, "Partial Content", "部分Get請求已經成功處理"),
    MULTI_STATUS(207, "Multi-Status", "請求已經成功處理,將返回XML消息體"),
    ALREADY_REPORTED(208, "Already Reported", "請求已經成功處理,一個DAV的綁定成員被前一個請求枚舉,並且沒有被再一次包括"),
    IM_USED(226, "IM Used", "請求已經成功處理,將響應一個或者多個實例"),
    MULTIPLE_CHOICES(300, "Multiple Choices", "提供可供選擇的回饋"),
    MOVED_PERMANENTLY(301, "Moved Permanently", "請求的資源已經永久轉移"),
    FOUND(302, "Found", "請重新發送請求"),
    // MOVED_TEMPORARILY(302, "Moved Temporarily", "") 已經過時
    SEE_OTHER(303, "See Other", "請以Get方式請求另一個URI"),
    NOT_MODIFIED(304, "Not Modified", "資源未改變"),
    USE_PROXY(305, "Use Proxy", "請通過Location域中的代理進行訪問"),
    // 306在新版本的規范中被棄用
    TEMPORARY_REDIRECT(307, "Temporary Redirect", "請求的資源臨時從不同的URI響應請求"),
    RESUME_INCOMPLETE(308, "Resume Incomplete", "請求的資源已經永久轉移"),
    BAD_REQUEST(400, "Bad Request", "請求錯誤,請修正請求"),
    UNAUTHORIZED(401, "Unauthorized", "沒有被授權或者授權已經失效"),
    PAYMENT_REQUIRED(402, "Payment Required", "預留狀態"),
    FORBIDDEN(403, "Forbidden", "請求被理解,但是拒絕執行"),
    NOT_FOUND(404, "Not Found", "資源未找到"),
    METHOD_NOT_ALLOWED(405, "Method Not Allowed", "請求方法不允許被執行"),
    NOT_ACCEPTABLE(406, "Not Acceptable", "請求的資源不滿足請求者要求"),
    PROXY_AUTHENTICATION_REQUIRED(407, "Proxy Authentication Required", "請通過代理進行身份驗證"),
    REQUEST_TIMEOUT(408, "Request Timeout", "請求超時"),
    CONFLICT(409, "Conflict", "請求沖突"),
    GONE(410, "Gone", "請求的資源不可用"),
    LENGTH_REQUIRED(411, "Length Required", "Content-Length未定義"),
    PRECONDITION_FAILED(412, "Precondition Failed", "不滿足請求的先決條件"),
    REQUEST_ENTITY_TOO_LARGE(413, "Request Entity Too Large", "請求發送的實體太大"),
    REQUEST_URI_TOO_LONG(414, "Request-URI Too Long", "請求的URI超長"),
    UNSUPPORTED_MEDIA_TYPE(415, "Unsupported Media Type", "請求發送的實體類型不受支持"),
    REQUESTED_RANGE_NOT_SATISFIABLE(416, "Requested range not satisfiable", "Range指定的范圍與當前資源可用范圍不一致"),
    EXPECTATION_FAILED(417, "Expectation Failed", "請求頭Expect中指定的預期內容無法被服務器滿足"),
    // I_AM_A_TEAPOT(418, "I'm a teapot", ""), 該代碼沒有被服務器實現

    // INSUFFICIENT_SPACE_ON_RESOURCE(419, "Insufficient Space On Resource", ""),  已經過時

    // METHOD_FAILURE(420, "Method Failure", ""),  已經過時

    // DESTINATION_LOCKED(421, "Destination Locked", ""),  已經過時
    UNPROCESSABLE_ENTITY(422, "Unprocessable Entity", "請求格式正確,但是由於含有語義錯誤,無法響應"),
    LOCKED(423, "Locked", "當前資源被鎖定"),
    FAILED_DEPENDENCY(424, "Failed Dependency", "由於之前的請求發生錯誤,導致當前請求失敗"),
    UPGRADE_REQUIRED(426, "Upgrade Required", "客戶端需要切換到TLS1.0"),
    PRECONDITION_REQUIRED(428, "Precondition Required", "請求需要提供前置條件"),
    TOO_MANY_REQUESTS(429, "Too Many Requests", "請求過多"),
    REQUEST_HEADER_FIELDS_TOO_LARGE(431, "Request Header Fields Too Large", "請求頭超大,拒絕請求"),
    INTERNAL_SERVER_ERROR(500, "Internal Server Error", "服務器內部錯誤"),
    NOT_IMPLEMENTED(501, "Not Implemented", "服務器不支持當前請求的部分功能"),
    BAD_GATEWAY(502, "Bad Gateway", "響應無效"),
    SERVICE_UNAVAILABLE(503, "Service Unavailable", "服務器維護或者過載,拒絕服務"),
    GATEWAY_TIMEOUT(504, "Gateway Timeout", "上游服務器超時"),
    HTTP_VERSION_NOT_SUPPORTED(505, "HTTP Version not supported", "不支持的HTTP版本"),
    VARIANT_ALSO_NEGOTIATES(506, "Variant Also Negotiates", "服務器內部配置錯誤"),
    INSUFFICIENT_STORAGE(507, "Insufficient Storage", "服務器無法完成存儲請求所需的內容"),
    LOOP_DETECTED(508, "Loop Detected", "服務器處理請求時發現死循環"),
    BANDWIDTH_LIMIT_EXCEEDED(509, "Bandwidth Limit Exceeded", "服務器達到帶寬限制"),
    NOT_EXTENDED(510, "Not Extended", "獲取資源所需的策略沒有被滿足"),
    NETWORK_AUTHENTICATION_REQUIRED(511, "Network Authentication Required", "需要進行網絡授權");

    private final int code;
    private final String reasonPhraseUS;
    private final String reasonPhraseCN;

    private static final int
            INFORMATIONAL = 1,
            SUCCESSFUL = 2,
            REDIRECTION = 3,
            CLIENT_ERROR = 4,
            SERVER_ERROR = 5;

    HttpStatusEnum(int code, String reasonPhraseUS, String reasonPhraseCN) {
        this.code = code;
        this.reasonPhraseUS = reasonPhraseUS;
        this.reasonPhraseCN = reasonPhraseCN;
    }

    public int code() {
        return code;
    }

    public String reasonPhraseUS() {
        return reasonPhraseUS;
    }

    public String reasonPhraseCN() {
        return reasonPhraseCN;
    }

    public static HttpStatusEnum valueOf(int code) {
        for (HttpStatusEnum httpStatus : values()) {
            if (httpStatus.code() == code) {
                return httpStatus;
            }
        }
        throw new IllegalArgumentException("No matching constant for [" + code + "]");
    }

    public boolean is1xxInformational() {
        return type() == INFORMATIONAL;
    }

    public boolean is2xxSuccessful() {
        return type() == SUCCESSFUL;
    }

    public boolean is3xxRedirection() {
        return type() == REDIRECTION;
    }

    public boolean is4xxClientError() {
        return type() == CLIENT_ERROR;
    }

    public boolean is5xxServerError() {
        return type() == SERVER_ERROR;
    }

    private int type() {
        return (int) code / 100;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM