最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring中HttpStatus與ResponseEntity使用及說明

 更新時(shí)間:2026年01月06日 09:14:21   作者:李昊哲小課  
Spring框架中的`HttpStatus`和`ResponseEntity`是處理HTTP響應(yīng)的關(guān)鍵類,`HttpStatus`枚舉封裝了標(biāo)準(zhǔn)的HTTP狀態(tài)碼,而`ResponseEntity`則可以封裝HTTP響應(yīng)的完整信息,包括狀態(tài)碼、頭部和體內(nèi)容,它們在Spring控制器中配合使用,可以靈活地控制和處理各種HTTP響應(yīng)場景

在Spring框架(尤其是Spring Web模塊)中,org.springframework.http.HttpStatusorg.springframework.http.ResponseEntity是處理HTTP響應(yīng)的核心類,二者配合使用可靈活控制HTTP響應(yīng)的狀態(tài)、頭部和體內(nèi)容。

以下是詳細(xì)解析:

一、HttpStatus:HTTP狀態(tài)碼的枚舉封裝

1. 定義與作用

HttpStatus是一個(gè)枚舉類,封裝了所有標(biāo)準(zhǔn)的HTTP狀態(tài)碼(如200、404、500等),每個(gè)枚舉常量對應(yīng)一個(gè)具體的HTTP狀態(tài),包含狀態(tài)碼的數(shù)字值、原因短語(Reason Phrase)等信息。

其核心作用是:提供標(biāo)準(zhǔn)化的HTTP狀態(tài)碼定義,避免硬編碼數(shù)字(如200),提高代碼的可讀性、可維護(hù)性和規(guī)范性。

2. 核心屬性與方法

每個(gè)HttpStatus枚舉常量都包含以下關(guān)鍵信息(可通過方法獲?。?/p>

  • 狀態(tài)碼數(shù)值:如200404等,通過int value()方法獲取。
  • 原因短語:狀態(tài)碼的文字描述(如OK、Not Found),通過String getReasonPhrase()方法獲取。
  • 狀態(tài)碼系列:HTTP狀態(tài)碼分為5類(1xx~5xx),通過Series series()方法獲取所屬系列(SeriesHttpStatus的內(nèi)部枚舉,包含INFORMATIONAL(1xx)、SUCCESSFUL(2xx)、REDIRECTION(3xx)、CLIENT_ERROR(4xx)、SERVER_ERROR(5xx))。

3. 常用枚舉常量

2xx成功類

  • OK:200,請求成功(常用)。
  • CREATED:201,資源創(chuàng)建成功(如POST新增資源)。
  • NO_CONTENT:204,請求成功但無響應(yīng)體(如DELETE刪除資源)。

4xx客戶端錯(cuò)誤類

  • BAD_REQUEST:400,請求參數(shù)錯(cuò)誤。
  • UNAUTHORIZED:401,未認(rèn)證(如未登錄)。
  • FORBIDDEN:403,權(quán)限不足。
  • NOT_FOUND:404,資源不存在。

5xx服務(wù)器錯(cuò)誤類

  • INTERNAL_SERVER_ERROR:500,服務(wù)器內(nèi)部錯(cuò)誤。
  • SERVICE_UNAVAILABLE:503,服務(wù)不可用。

4. 實(shí)用方法

系列判斷:如is2xxSuccessful()(是否為2xx成功狀態(tài))、is4xxClientError()(是否為4xx客戶端錯(cuò)誤)等,簡化狀態(tài)碼類型的判斷。

boolean isSuccess = HttpStatus.OK.is2xxSuccessful(); // true

狀態(tài)碼匹配:matches(int statusCode)判斷當(dāng)前枚舉是否匹配指定的數(shù)字狀態(tài)碼。

boolean isOk = HttpStatus.OK.matches(200); // true

5. 枚舉常量詳解

以下是HTTP狀態(tài)碼的作用和應(yīng)用場景說明,按狀態(tài)碼類別整理為表格:

狀態(tài)碼名稱作用應(yīng)用場景
1xx 信息性狀態(tài)碼表示服務(wù)器已接收請求,正在處理或等待進(jìn)一步操作
100Continue服務(wù)器已接收請求頭,允許客戶端繼續(xù)發(fā)送請求體客戶端發(fā)送大文件前,先確認(rèn)服務(wù)器是否愿意接收(如上傳大文件)
101Switching Protocols服務(wù)器同意切換到客戶端請求的協(xié)議WebSocket連接建立時(shí),從HTTP協(xié)議升級到WebSocket協(xié)議
102Processing服務(wù)器正在處理請求,尚未完成處理耗時(shí)請求(如復(fù)雜查詢)時(shí),告知客戶端請求仍在處理中
103Early Hints服務(wù)器提前返回部分響應(yīng)頭,幫助客戶端預(yù)加載資源大型頁面加載時(shí),提前告知客戶端緩存策略或預(yù)連接資源
103Checkpoint(已廢棄)原用于斷點(diǎn)續(xù)傳標(biāo)記已被103 Early Hints替代,不再推薦使用
2xx 成功狀態(tài)碼表示請求已成功被服務(wù)器接收、理解并處理
200OK請求成功,返回預(yù)期響應(yīng)內(nèi)容絕大多數(shù)成功的GET、POST等請求(如獲取數(shù)據(jù)、提交表單成功)
201Created請求成功且創(chuàng)建了新資源POST請求創(chuàng)建資源(如新建用戶、訂單)時(shí)返回
202Accepted請求已被接受,但尚未處理完成異步處理請求(如后臺(tái)任務(wù)提交后,返回任務(wù)受理狀態(tài))
203Non-Authoritative Information請求成功,但響應(yīng)元數(shù)據(jù)來自第三方代理服務(wù)器返回原始服務(wù)器的資源,但部分元數(shù)據(jù)被代理修改
204No Content請求成功,但無返回內(nèi)容DELETE請求刪除資源成功,或不需要返回內(nèi)容的操作
205Reset Content請求成功,客戶端應(yīng)重置視圖表單提交后,告知客戶端重置表單輸入狀態(tài)
206Partial Content部分請求成功,返回指定范圍的資源斷點(diǎn)續(xù)傳(如大文件下載時(shí),客戶端通過Range頭請求部分內(nèi)容)
207Multi-Status多狀態(tài)響應(yīng),包含多個(gè)資源的處理結(jié)果WebDAV協(xié)議中,批量操作多個(gè)資源時(shí)返回各資源的狀態(tài)
208Already Reported資源已在其他請求中報(bào)告過WebDAV綁定操作中,避免重復(fù)報(bào)告同一資源狀態(tài)
226IM Used服務(wù)器已執(zhí)行GET請求,響應(yīng)是對資源的修改基于HTTP的增量更新(如版本控制系統(tǒng)返回資源修改部分)
3xx 重定向狀態(tài)碼表示客戶端需要進(jìn)一步操作才能完成請求
300Multiple Choices請求有多個(gè)可能的響應(yīng),需用戶選擇資源有多個(gè)版本(如不同語言、格式)時(shí),提供選擇列表
301Moved Permanently資源已永久移動(dòng)到新URL網(wǎng)站域名變更,舊URL永久重定向到新URL(客戶端應(yīng)更新書簽)
302Found資源臨時(shí)移動(dòng)到新URL臨時(shí)跳轉(zhuǎn)(如維護(hù)頁面臨時(shí)重定向到通知頁,客戶端下次仍用原URL)
302Moved Temporarily(已廢棄)同302 Found,舊稱已被302 Found替代,語義一致
303See Other請求完成后,需用GET方法訪問新URLPOST表單提交成功后,重定向到結(jié)果頁(避免刷新重復(fù)提交)
304Not Modified資源未修改,客戶端可使用緩存客戶端帶ETag/Last-Modified頭請求,服務(wù)器確認(rèn)資源未變時(shí)返回
305Use Proxy(已廢棄)資源必須通過指定代理訪問因安全問題已不推薦使用,現(xiàn)代瀏覽器多不支持
307Temporary Redirect臨時(shí)重定向,保持原請求方法POST請求臨時(shí)重定向時(shí),仍用POST方法訪問新URL(如臨時(shí)服務(wù)器遷移)
308Permanent Redirect永久重定向,保持原請求方法PUT請求永久重定向時(shí),仍用PUT方法訪問新URL(如API域名永久變更)
4xx 客戶端錯(cuò)誤狀態(tài)碼表示請求存在錯(cuò)誤,服務(wù)器無法處理
400Bad Request請求語法錯(cuò)誤或參數(shù)無效提交的表單數(shù)據(jù)格式錯(cuò)誤、JSON參數(shù)缺失等
401Unauthorized請求需要身份驗(yàn)證未登錄用戶訪問需授權(quán)的接口,或令牌過期/無效
402Payment Required預(yù)留狀態(tài)碼,需付費(fèi)才能訪問極少使用,理論上用于付費(fèi)內(nèi)容訪問(如訂閱服務(wù))
403Forbidden服務(wù)器拒絕請求(已認(rèn)證但無權(quán)限)登錄用戶訪問無權(quán)限的資源(如普通用戶訪問管理員頁面)
404Not Found請求的資源不存在訪問不存在的URL(如拼寫錯(cuò)誤的頁面、已刪除的資源)
405Method Not Allowed請求方法不被允許用POST訪問只支持GET的接口,或用DELETE訪問只讀資源
406Not Acceptable服務(wù)器無法提供客戶端接受的格式客戶端通過Accept頭要求JSON格式,但服務(wù)器只支持XML
407Proxy Authentication Required需要代理服務(wù)器認(rèn)證客戶端通過代理訪問時(shí),未通過代理的身份驗(yàn)證
408Request Timeout客戶端請求超時(shí)客戶端發(fā)送請求過慢,服務(wù)器等待超時(shí)
409Conflict請求與服務(wù)器當(dāng)前狀態(tài)沖突并發(fā)修改資源(如兩人同時(shí)編輯文檔,后提交者沖突)
410Gone資源已永久刪除,不再可用原URL對應(yīng)的資源被徹底刪除,且無替代地址
411Length Required服務(wù)器要求Content-Length頭,客戶端未提供客戶端發(fā)送帶請求體的請求(如POST)但未指定內(nèi)容長度
412Precondition Failed請求頭的前置條件不滿足客戶端用If-Match驗(yàn)證資源版本,服務(wù)器發(fā)現(xiàn)版本不匹配
413Payload Too Large請求體過大,服務(wù)器拒絕處理客戶端上傳超大文件,超過服務(wù)器限制
413Request Entity Too Large(已廢棄)同413 Payload Too Large,舊稱已被413 Payload Too Large替代
414URI Too Long請求URI過長,服務(wù)器無法處理客戶端請求的URL包含過多參數(shù)或過長路徑
414Request-URI Too Long(已廢棄)同414 URI Too Long,舊稱已被414 URI Too Long替代
415Unsupported Media Type請求體的媒體類型不被支持客戶端發(fā)送application/xml數(shù)據(jù),但服務(wù)器只支持application/json
416Requested Range Not SatisfiableRange請求的范圍無效客戶端請求文件的第1000-2000字節(jié),但文件僅500字節(jié)
417Expectation Failed服務(wù)器無法滿足Expect請求頭客戶端用Expect: 100-continue,但服務(wù)器不支持
418I’m a teapot服務(wù)器是茶壺,不能煮咖啡(玩笑性質(zhì))愚人節(jié)玩笑,多用于測試或彩蛋(如某些API的趣味響應(yīng))
419Insufficient Space On Resource(已廢棄)資源存儲(chǔ)空間不足舊版WebDAV使用,已被507 Insufficient Storage替代
420Method Failure(已廢棄)請求方法執(zhí)行失敗曾用于Spring框架,已棄用,建議用422或500替代
421Destination Locked(已廢棄)目標(biāo)資源被鎖定舊版WebDAV使用,已被423 Locked替代
422Unprocessable Entity請求語法正確,但語義錯(cuò)誤表單驗(yàn)證失?。ㄈ玎]箱格式正確但已被注冊)
423Locked資源被鎖定,無法操作WebDAV中,資源被其他用戶鎖定編輯時(shí)
424Failed Dependency因前置請求失敗,當(dāng)前請求無法完成WebDAV批量操作中,某資源處理失敗導(dǎo)致后續(xù)請求依賴失敗
425Too Early服務(wù)器不愿處理可能重復(fù)的請求防止重放攻擊(如客戶端重復(fù)發(fā)送同一請求)
426Upgrade Required客戶端需升級協(xié)議服務(wù)器僅支持HTTPS,客戶端用HTTP訪問時(shí),要求升級
428Precondition Required服務(wù)器要求請求包含前置條件服務(wù)器為防止并發(fā)修改,要求請求帶If-Match等頭
429Too Many Requests客戶端請求過于頻繁,觸發(fā)限流API調(diào)用超過速率限制(如1分鐘內(nèi)請求超過100次)
431Request Header Fields Too Large請求頭過大,服務(wù)器拒絕處理客戶端發(fā)送的Cookie或其他頭信息超過服務(wù)器限制
451Unavailable For Legal Reasons資源因法律原因不可用資源被法院要求屏蔽(如版權(quán)侵權(quán)、違法內(nèi)容)
5xx 服務(wù)器錯(cuò)誤狀態(tài)碼表示服務(wù)器處理請求時(shí)發(fā)生錯(cuò)誤
500Internal Server Error服務(wù)器內(nèi)部通用錯(cuò)誤服務(wù)器代碼異常(如NullPointerException)
501Not Implemented服務(wù)器不支持請求的方法客戶端使用服務(wù)器未實(shí)現(xiàn)的HTTP方法(如PROPFIND)
502Bad Gateway網(wǎng)關(guān)/代理收到無效響應(yīng)反向代理服務(wù)器從上游服務(wù)器收到錯(cuò)誤響應(yīng)
503Service Unavailable服務(wù)器暫時(shí)不可用服務(wù)器維護(hù)、過載時(shí),返回此狀態(tài)(可帶Retry-After頭)
504Gateway Timeout網(wǎng)關(guān)/代理等待上游響應(yīng)超時(shí)反向代理服務(wù)器等待后端服務(wù)響應(yīng)超時(shí)
505HTTP Version Not Supported服務(wù)器不支持請求的HTTP版本客戶端用HTTP/3請求,服務(wù)器僅支持HTTP/1.1
506Variant Also Negotiates內(nèi)容協(xié)商過程出錯(cuò)(循環(huán)引用)服務(wù)器配置錯(cuò)誤,導(dǎo)致協(xié)商過程無限循環(huán)
507Insufficient Storage服務(wù)器存儲(chǔ)不足WebDAV中,服務(wù)器無法存儲(chǔ)上傳的資源
508Loop Detected服務(wù)器檢測到無限循環(huán)WebDAV中,處理請求時(shí)發(fā)現(xiàn)資源引用循環(huán)
509Bandwidth Limit Exceeded服務(wù)器帶寬超限非標(biāo)準(zhǔn)狀態(tài)碼,部分服務(wù)器用于表示帶寬用盡
510Not Extended請求需要擴(kuò)展,但服務(wù)器不支持客戶端請求的擴(kuò)展功能未被服務(wù)器實(shí)現(xiàn)
511Network Authentication Required需要網(wǎng)絡(luò)認(rèn)證公共WiFi中,用戶未登錄前訪問互聯(lián)網(wǎng)(跳轉(zhuǎn)登錄頁)

二、ResponseEntity:HTTP響應(yīng)的完整封裝

1. 定義與作用

ResponseEntity<T>是一個(gè)泛型類,用于封裝HTTP響應(yīng)的完整信息,包括:

  • 響應(yīng)狀態(tài)碼(通過HttpStatus指定);
  • 響應(yīng)頭(HttpHeaders);
  • 響應(yīng)體(泛型T,即返回給客戶端的數(shù)據(jù))。

其核心作用是:在Spring MVC/WebFlux控制器中,作為方法返回值,精細(xì)化控制HTTP響應(yīng)的各個(gè)部分(相比@ResponseBody僅能控制響應(yīng)體,ResponseEntity更靈活)。

2. 核心結(jié)構(gòu)

ResponseEntity的核心組成:

  • private final T body:響應(yīng)體(可為null,如204狀態(tài)無體);
  • private final HttpHeaders headers:響應(yīng)頭(如Content-TypeAuthorization等);
  • private final HttpStatus statusCode:響應(yīng)狀態(tài)碼(HttpStatus枚舉)。

3. 常用創(chuàng)建方式

ResponseEntity提供了多種靜態(tài)工廠方法和構(gòu)造器,簡化創(chuàng)建過程:

直接指定狀態(tài)碼和響應(yīng)體

// 返回200 OK + 響應(yīng)體
return ResponseEntity.ok(user); // 等價(jià)于 ResponseEntity.status(HttpStatus.OK).body(user)

// 返回201 Created + 響應(yīng)體
return ResponseEntity.status(HttpStatus.CREATED).body(newUser);

帶響應(yīng)頭的響應(yīng)

HttpHeaders headers = new HttpHeaders();
headers.add("Location", "/users/123"); // 新增資源的URL
return new ResponseEntity<>(user, headers, HttpStatus.CREATED);

無響應(yīng)體的響應(yīng)

// 返回204 No Content(無響應(yīng)體)
return ResponseEntity.noContent().build();

// 返回404 Not Found(無響應(yīng)體)
return ResponseEntity.notFound().build();

自定義響應(yīng)頭和狀態(tài)

return ResponseEntity.status(HttpStatus.FORBIDDEN)
                     .header("X-Error", "Permission denied")
                     .body("無權(quán)訪問");

4. 核心方法

  • T getBody():獲取響應(yīng)體(可能為null);
  • HttpHeaders getHeaders():獲取響應(yīng)頭;
  • HttpStatus getStatusCode():獲取響應(yīng)狀態(tài)碼(HttpStatus枚舉);
  • int getStatusCodeValue():獲取狀態(tài)碼的數(shù)字值(如200)。

三、二者的關(guān)系與使用場景

1. 配合關(guān)系

HttpStatusResponseEntity的“狀態(tài)碼工具”:ResponseEntity通過HttpStatus枚舉來指定響應(yīng)的狀態(tài)碼,避免直接使用數(shù)字,保證規(guī)范性。

2. 典型使用場景

在Spring控制器中,當(dāng)需要:

  • 不僅返回?cái)?shù)據(jù)(響應(yīng)體),還需指定狀態(tài)碼(如創(chuàng)建資源返回201);
  • 自定義響應(yīng)頭(如設(shè)置Cache-ControlLocation);
  • 返回?zé)o響應(yīng)體的狀態(tài)(如204、404);

此時(shí)必須使用ResponseEntity,并結(jié)合HttpStatus指定狀態(tài)。

示例:

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User savedUser = userService.save(user); // 保存用戶
        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(URI.create("/users/" + savedUser.getId())); // 資源位置
        // 返回201狀態(tài) + 響應(yīng)體 + 自定義頭
        return new ResponseEntity<>(savedUser, headers, HttpStatus.CREATED);
    }

    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        return userService.findById(id)
                .map(ResponseEntity::ok) // 存在則返回200 + 數(shù)據(jù)
                .orElseGet(() -> ResponseEntity.notFound().build()); // 不存在返回404
    }
}

總結(jié)

  • HttpStatus:標(biāo)準(zhǔn)化HTTP狀態(tài)碼的枚舉,提供狀態(tài)碼、原因短語及系列判斷,避免硬編碼。
  • ResponseEntity:封裝HTTP響應(yīng)的完整信息(狀態(tài)碼、頭、體),是Spring控制器中精細(xì)化控制響應(yīng)的核心類。

二者配合使用,可優(yōu)雅地處理各種HTTP響應(yīng)場景,是Spring Web開發(fā)的基礎(chǔ)工具。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

张北县| 合江县| 吴桥县| 南阳市| 眉山市| 曲水县| 修水县| 望奎县| 皮山县| 彭山县| 开鲁县| 馆陶县| 三台县| 东兴市| 汉源县| 普兰店市| 达拉特旗| 普格县| 忻州市| 华容县| 手机| 静海县| 西华县| 门头沟区| 武平县| 吴忠市| 甘德县| 太仆寺旗| 浙江省| 平阳县| 前郭尔| 德江县| 彰武县| 房山区| 珲春市| 克什克腾旗| 赫章县| 启东市| 新河县| 金乡县| 乌拉特前旗|