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

Spring MVC處理HTTP狀態(tài)碼、響應(yīng)頭和異常的完整示例

 更新時(shí)間:2025年08月21日 10:35:31   作者:愛(ài)的嘆息  
Spring MVC 是 Spring 框架中的一個(gè)模塊,專門用于構(gòu)建基于 MVC(Model-View-Controller)架構(gòu)的 Web 應(yīng)用程序,其核心在于處理 HTTP 請(qǐng)求并將其映射到相應(yīng)的控制器方法,本文給大家介紹了Spring MVC處理HTTP狀態(tài)碼、響應(yīng)頭和異常的完整示例,需要的朋友可以參考下

Spring MVC 處理 HTTP 狀態(tài)碼、響應(yīng)頭和異常的完整示例

1. 正常響應(yīng)處理

通過(guò) ResponseEntity 可以靈活控制 HTTP 狀態(tài)碼、響應(yīng)頭和響應(yīng)體。

代碼示例:創(chuàng)建資源返回 201 并設(shè)置 Location 頭

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

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

    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        // 保存用戶邏輯(假設(shè)已成功保存)
        user.setId(1L); // 假設(shè)生成的用戶ID為1

        // 設(shè)置 Location 頭指向新資源的 URI
        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(ServletUriComponentsBuilder
                .fromCurrentRequest()
                .path("/{id}")
                .buildAndExpand(user.getId())
                .toUri());

        return new ResponseEntity<>(user, headers, HttpStatus.CREATED); // 201 Created
    }
}

代碼示例:成功響應(yīng)返回 200 并設(shè)置 Cache-Control 頭

@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
    User user = userService.findById(id); // 假設(shè)用戶存在
    HttpHeaders headers = new HttpHeaders();
    headers.setCacheControl(CacheControl.noCache()); // 禁止緩存

    return new ResponseEntity<>(user, headers, HttpStatus.OK); // 200 OK
}

2. 異常處理

通過(guò) @ResponseStatus@ControllerAdvice 實(shí)現(xiàn)異常狀態(tài)碼與響應(yīng)控制。

自定義異常類(帶 @ResponseStatus)

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "User not found")
public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(String message) {
        super(message);
    }
}

全局異常處理類(@ControllerAdvice)

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<ErrorDetails> handleUserNotFound(
            UserNotFoundException ex, WebRequest request) {
        ErrorDetails error = new ErrorDetails(
                HttpStatus.NOT_FOUND.value(),
                ex.getMessage(),
                request.getDescription(false)
        );
        return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorDetails> handleGeneralException(
            Exception ex, WebRequest request) {
        ErrorDetails error = new ErrorDetails(
                HttpStatus.INTERNAL_SERVER_ERROR.value(),
                "Internal Server Error",
                request.getDescription(false)
        );
        return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    // 輔助類:錯(cuò)誤響應(yīng)體
    private static class ErrorDetails {
        private int statusCode;
        private String message;
        private String path;

        public ErrorDetails(int statusCode, String message, String path) {
            this.statusCode = statusCode;
            this.message = message;
            this.path = path;
        }
        // 省略 getter/setter
    }
}

3. 響應(yīng)頭設(shè)置示例

@GetMapping("/custom-headers")
public ResponseEntity<String> customHeaders() {
    HttpHeaders headers = new HttpHeaders();
    headers.add("X-Custom-Header", "custom-value");
    headers.set("Content-Type", "text/plain");
    headers.set("Access-Control-Allow-Origin", "*");
    return new ResponseEntity<>("Response with custom headers", headers, HttpStatus.OK);
}

4. 關(guān)鍵注解與類說(shuō)明

注解/類作用示例
@ResponseStatus在異常類上定義默認(rèn) HTTP 狀態(tài)碼和原因。@ResponseStatus(HttpStatus.NOT_FOUND)
ResponseEntity直接控制 HTTP 狀態(tài)碼、響應(yīng)頭和響應(yīng)體。new ResponseEntity<>(data, headers, HttpStatus.OK)
@ControllerAdvice全局異常處理類,集中管理異常響應(yīng)。@ControllerAdvice + @ExceptionHandler
HttpStatusHTTP 狀態(tài)碼枚舉(如 HttpStatus.OK, HttpStatus.CREATED)。HttpStatus.NOT_FOUND

5. 場(chǎng)景總結(jié)表格

場(chǎng)景實(shí)現(xiàn)方式狀態(tài)碼響應(yīng)頭示例適用情況
成功創(chuàng)建資源ResponseEntity + HttpStatus.CREATED201Location: /api/users/1新資源創(chuàng)建成功后返回位置
返回成功數(shù)據(jù)ResponseEntity + HttpStatus.OK200Cache-Control: no-cache正常業(yè)務(wù)響應(yīng)
資源不存在異常@ResponseStatus(HttpStatus.NOT_FOUND)404無(wú)資源查詢失敗
全局異常處理(如服務(wù)器錯(cuò)誤)@ControllerAdvice + @ExceptionHandler500無(wú)捕獲通用未處理異常
自定義響應(yīng)頭ResponseEntity 設(shè)置 HttpHeaders200X-Custom-Header: custom-value需要添加自定義響應(yīng)頭時(shí)

關(guān)鍵總結(jié)

  1. 狀態(tài)碼控制
    • ResponseEntity 直接指定狀態(tài)碼(如 HttpStatus.CREATED)。
    • @ResponseStatus 在異常類上定義默認(rèn)狀態(tài)碼。
  2. 響應(yīng)頭管理
    • 通過(guò) HttpHeaders 對(duì)象添加任意頭信息。
  3. 異常處理
    • 自定義異常 + @ResponseStatus:針對(duì)特定異常返回狀態(tài)碼。
    • @ControllerAdvice:全局統(tǒng)一處理異常,返回結(jié)構(gòu)化錯(cuò)誤信息。
  4. 最佳實(shí)踐
    • 使用 ResponseEntity 精確控制響應(yīng)細(xì)節(jié)。
    • 通過(guò) ErrorDetails 統(tǒng)一錯(cuò)誤響應(yīng)格式。
    • 對(duì)于常見(jiàn) HTTP 狀態(tài)碼(如 404、500),優(yōu)先使用標(biāo)準(zhǔn)枚舉值。

以上就是Spring MVC處理HTTP狀態(tài)碼、響應(yīng)頭和異常的完整示例的詳細(xì)內(nèi)容,更多關(guān)于Spring MVC處理HTTP的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Feign?日期格式轉(zhuǎn)換錯(cuò)誤的問(wèn)題

    Feign?日期格式轉(zhuǎn)換錯(cuò)誤的問(wèn)題

    這篇文章主要介紹了Feign?日期格式轉(zhuǎn)換錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Mybatis-plus原生pages分頁(yè)未生效的解決方案

    Mybatis-plus原生pages分頁(yè)未生效的解決方案

    本文主要介紹了Mybatis-plus原生pages分頁(yè)未生效的解決方案,包含介紹了未生效的5種原因以及解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • java生成圖片驗(yàn)證碼返回base64圖片信息方式

    java生成圖片驗(yàn)證碼返回base64圖片信息方式

    這篇文章主要介紹了java生成圖片驗(yàn)證碼返回base64圖片信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 劍指Offer之Java算法習(xí)題精講字符串與二叉搜索樹

    劍指Offer之Java算法習(xí)題精講字符串與二叉搜索樹

    跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過(guò)之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • JAVAEE項(xiàng)目結(jié)構(gòu)以及并發(fā)隨想

    JAVAEE項(xiàng)目結(jié)構(gòu)以及并發(fā)隨想

    每個(gè)代碼里面的工具都是工具,API是你最需要理解的,哪個(gè)好,哪個(gè)不好,沒(méi)有準(zhǔn)確答案。 一切皆對(duì)象,對(duì)于Java來(lái)講是純粹的,代理是對(duì)象,反射是對(duì)象,對(duì)象是對(duì)象,基本數(shù)據(jù)類型不是對(duì)象。
    2016-04-04
  • Spring web集成rabbitmq代碼實(shí)例

    Spring web集成rabbitmq代碼實(shí)例

    這篇文章主要介紹了Spring web集成rabbitmq代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 在Java的Struts中判斷是否調(diào)用AJAX及用攔截器對(duì)其優(yōu)化

    在Java的Struts中判斷是否調(diào)用AJAX及用攔截器對(duì)其優(yōu)化

    這篇文章主要介紹了在Java的Struts中判斷是否調(diào)用AJAX及用攔截器對(duì)其優(yōu)化的方法,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2016-01-01
  • java隨機(jī)字符補(bǔ)充版

    java隨機(jī)字符補(bǔ)充版

    今天在zuidaimai看到一個(gè)java隨機(jī)字符生成demo,正好要用,但發(fā)現(xiàn)不完整,重新整理一下,分享給有需要的朋友
    2014-01-01
  • Java 3D入門之基本圖形功能 附源碼

    Java 3D入門之基本圖形功能 附源碼

    Java3D API是Sun定義的用于實(shí)現(xiàn)3D顯示的接口。3D技術(shù)是底層的顯示技術(shù),Java3D提供了基于Java的上層接口。Java3D把OpenGL和DirectX這些底層技術(shù)包裝在Java接口中。這種全新的設(shè)計(jì)使3D技術(shù)變得不再繁瑣且可以加入到J2SE、J2EE的整套架構(gòu),故保證了Java3D技術(shù)強(qiáng)大的擴(kuò)展性
    2021-10-10
  • Java中Maven項(xiàng)目導(dǎo)出jar包配置的示例代碼

    Java中Maven項(xiàng)目導(dǎo)出jar包配置的示例代碼

    這篇文章主要介紹了Java中Maven項(xiàng)目導(dǎo)出jar包配置的示例代碼,需要的朋友可以參考下
    2018-11-11

最新評(píng)論

伊宁县| 拜泉县| 夹江县| 澄迈县| 宁乡县| 新野县| 伊通| 新乐市| 都安| 商河县| 咸宁市| 临高县| 屏南县| 徐州市| 台东市| 安康市| 镇远县| 石阡县| 大洼县| 澄迈县| 新竹县| 潮州市| 尉犁县| 曲水县| 沙田区| 邯郸市| 平乐县| 左云县| 东海县| 宁海县| 沂南县| 新余市| 通州市| 昌江| 鄂托克旗| 桐柏县| 蒲江县| 蓬溪县| 柏乡县| 区。| 桃园县|