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

SpringBoot統(tǒng)一數(shù)據(jù)返回格式的實(shí)現(xiàn)示例

 更新時(shí)間:2024年05月29日 08:32:33   作者:小小小小關(guān)同學(xué)  
本文主要介紹了SpringBoot統(tǒng)一數(shù)據(jù)返回格式,它提高了代碼的可維護(hù)性和一致性,并改善了客戶端與服務(wù)端之間的通信,具有一定的參考價(jià)值,感興趣的可以了解一下

在 Spring Boot 項(xiàng)目中,統(tǒng)一的數(shù)據(jù)格式返回是一種良好的實(shí)踐,它提高了代碼的可維護(hù)性和一致性,并改善了客戶端與服務(wù)端之間的通信。本文將介紹如何在 Spring Boot 中實(shí)現(xiàn)統(tǒng)一的數(shù)據(jù)格式返回。

1 為什么需要統(tǒng)一數(shù)據(jù)返回格式

  • ?便前端程序員更好的接收和解析后端數(shù)據(jù)接?返回的數(shù)據(jù)。
  • 降低前端程序員和后端程序員的溝通成本,按照某個(gè)格式實(shí)現(xiàn)就?了,因?yàn)樗薪?都是這樣返回的。
  • 有利于項(xiàng)?統(tǒng)?數(shù)據(jù)的維護(hù)和修改。
  • 有利于后端技術(shù)部?的統(tǒng)?規(guī)范的標(biāo)準(zhǔn)制定,不會(huì)出現(xiàn)稀奇古怪的返回內(nèi)容。

2 統(tǒng)一數(shù)據(jù)返回格式的實(shí)現(xiàn)

統(tǒng)?的數(shù)據(jù)返回格式可以使? @ControllerAdvice + ResponseBodyAdvice 的?式實(shí)現(xiàn)。

  • @ControllerAdvice是Spring框架提供的一個(gè)用于全局處理控制器的增強(qiáng)器注解。通過@ControllerAdvice注解的類,可以將對(duì)應(yīng)的增強(qiáng)邏輯應(yīng)用到所有的@Controller注解的控制器中。
  • @ResponseBodyAdvice是一個(gè)用于處理響應(yīng)體的接口。通過實(shí)現(xiàn)這個(gè)接口,可以在Controller方法返回之前和之后對(duì)響應(yīng)體進(jìn)行處理。

具體實(shí)現(xiàn)如下:

2.1 創(chuàng)建統(tǒng)一響應(yīng)類

首先,我們需要?jiǎng)?chuàng)建一個(gè)統(tǒng)一的響應(yīng)類,用于封裝 API 返回的數(shù)據(jù):

public class ApiResponse<T> {
    private int status;
    private String message;
    private T data;

    public ApiResponse(int status, String message, T data) {
        this.status = status;
        this.message = message;
        this.data = data;
    }

    // Getters and Setters
}

2.2 創(chuàng)建統(tǒng)一響應(yīng)處理類

這里使用@controller注解和ResponseBodyAdvice來實(shí)現(xiàn)

@ControllerAdvice
public class GlobalResponseBodyAdvice implements ResponseBodyAdvice<Object> {

    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        // 判斷是否需要處理響應(yīng)體
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
                                  Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        // 包裝響應(yīng)體
        if (body instanceof ApiResponse) {
            return body;
        }
        return new ApiResponse<>(HttpStatus.OK.value(), "Success", body);
    }
}

為了保證異常也能返回統(tǒng)一的數(shù)據(jù)格式,我們需要?jiǎng)?chuàng)建一個(gè)全局異常處理類,博客 講解了Spring Boot中如何進(jìn)行統(tǒng)一異常處理。

@ControllerAdvice //添加完此注解后,此類隨著springboot項(xiàng)目的啟動(dòng)而啟動(dòng),并且會(huì)監(jiān)控controller的異常.監(jiān)聽項(xiàng)目中所有的異常
@ResponseBody
public class MyExceptionAdvice {

    //這里的一場(chǎng)都是意外異常,并不是業(yè)務(wù)異常,業(yè)務(wù)異常后端controller會(huì)處理返回給前端.業(yè)務(wù)異常會(huì)和前端溝通好已規(guī)定的狀態(tài)碼返回。
    @ExceptionHandler(NullPointerException.class)
    public ApiResponse<String> doNullPointerException(NullPointerException e){
        ApiResponse<String> apiResponse = new ApiResponse<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage(), null);
        return apiResponse;
    }

    // 默認(rèn)的異常處理,當(dāng)有有異常出現(xiàn)的時(shí)候,會(huì)先匹配子類的異常,當(dāng)所有的異常都沒有匹配的時(shí)候就會(huì)走這一條默認(rèn)的一場(chǎng)路線業(yè)務(wù)。
    @ExceptionHandler(Exception.class)
    public ApiResponse<String> doException(Exception e){
        ApiResponse<String> apiResponse = new ApiResponse<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage(), null);
        return apiResponse;
    }
}

2.3 controller模擬數(shù)據(jù)并返回

觀察異常出現(xiàn)情況下和正常訪問情況下,是否都實(shí)現(xiàn)了統(tǒng)一格式返回。

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

    @RequestMapping("login")
    public String login(){
        Object obj = null;
        System.out.println(obj.hashCode());
        return  "這里是login";
    }

    @GetMapping("/data")
    public User getUserData() {
        // 這個(gè)方法會(huì)返回一個(gè)User對(duì)象
        User user = new User();
        user.setId(1);
        user.setName("張三");
        user.setEmail("zhangsan@example.com");
        return user;
    }

    @GetMapping("/success")
    public Integer getSuccessMessage() {
        // 這個(gè)方法會(huì)返回一個(gè)簡單的字符串
        return 123456;
    }
}

訪問:127.0.0.1:8080/user/login 可以看到異常信息被統(tǒng)一處理并統(tǒng)一格式后返回。

訪問127.0.0.1:8080/user/data ,可以看到接收到的數(shù)據(jù)也被統(tǒng)一處理。

訪問127.0.0.1:8080/user/success ,可以看到接收到的數(shù)據(jù)也被統(tǒng)一處理。

 總結(jié)

通過上述步驟,我們實(shí)現(xiàn)了使用@ControllerAdvice和ResponseBodyAdvice統(tǒng)一API數(shù)據(jù)返回格式的功能。這種方式不僅簡化了代碼,還使得API響應(yīng)格式一致,更加規(guī)范和易于維護(hù)。

到此這篇關(guān)于SpringBoot統(tǒng)一數(shù)據(jù)返回格式的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot統(tǒng)一數(shù)據(jù)返回格式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Cloud基于zuul實(shí)現(xiàn)網(wǎng)關(guān)過程解析

    Spring Cloud基于zuul實(shí)現(xiàn)網(wǎng)關(guān)過程解析

    這篇文章主要介紹了Spring Cloud基于zuul實(shí)現(xiàn)網(wǎng)關(guān)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • mybatis實(shí)現(xiàn)批量更新全過程

    mybatis實(shí)現(xiàn)批量更新全過程

    Mybatis實(shí)現(xiàn)批量更新的三種方式:foreach標(biāo)簽、casewhen語句和choose語句,foreach標(biāo)簽適用于大量數(shù)據(jù)更新,casewhen語句適用于一次性批量更新較少記錄,BatchExecutor批處理器適用于需要在一次數(shù)據(jù)庫會(huì)話中批量執(zhí)行多個(gè)SQL語句,但可能不支持所有數(shù)據(jù)庫
    2025-11-11
  • IDEA中如何移除未使用的包

    IDEA中如何移除未使用的包

    這篇文章主要介紹了IDEA中如何移除未使用的包問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • java?zip文件解壓后無法刪除原zip文件問題

    java?zip文件解壓后無法刪除原zip文件問題

    這篇文章主要介紹了java?zip文件解壓后無法刪除原zip文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • IDEA連接mysql保姆級(jí)教學(xué)教程

    IDEA連接mysql保姆級(jí)教學(xué)教程

    學(xué)習(xí)使用IDEA的時(shí)候,需要連接Database,下面這篇文章主要給大家介紹了關(guān)于IDEA連接mysql的保姆級(jí)教學(xué)教程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • 使用java生成字母驗(yàn)證碼

    使用java生成字母驗(yàn)證碼

    這篇文章主要介紹了使用java生成字母驗(yàn)證碼的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 如何有效管理JVM中的垃圾?

    如何有效管理JVM中的垃圾?

    今天給大家?guī)淼氖顷P(guān)于Java虛擬機(jī)的相關(guān)知識(shí),文章圍繞著如何有效管理JVM中的垃圾展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Jenkins一鍵打包部署SpringBoot應(yīng)用

    Jenkins一鍵打包部署SpringBoot應(yīng)用

    本文主要介紹了Jenkins一鍵打包部署SpringBoot應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • nacos客戶端一致性hash負(fù)載需求實(shí)現(xiàn)

    nacos客戶端一致性hash負(fù)載需求實(shí)現(xiàn)

    這篇文章主要介紹了nacos客戶端一致性hash負(fù)載的需求實(shí)現(xiàn)過程及步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • 解決SpringMVC 返回Java8 時(shí)間JSON數(shù)據(jù)的格式化問題處理

    解決SpringMVC 返回Java8 時(shí)間JSON數(shù)據(jù)的格式化問題處理

    本篇文章主要介紹了解決SpringMVC 返回Java8 時(shí)間JSON數(shù)據(jù)的格式化問題處理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02

最新評(píng)論

库伦旗| 和田市| 郯城县| 沾益县| 浦东新区| 兴海县| 偃师市| 平邑县| 永州市| 永靖县| 开化县| 平阴县| 义马市| 原阳县| 牙克石市| 思茅市| 沅江市| 浦城县| 科技| 定州市| 道孚县| 安达市| 客服| 泽州县| 定结县| 正阳县| 隆尧县| 社会| 民权县| 张家口市| 景洪市| 青阳县| 乡城县| 乌兰察布市| 厦门市| 出国| 辉县市| 昌都县| 朝阳市| 潞西市| 四会市|