日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

接口响应时组装响应json_企业实战之spring项目《接口响应体格式统一封装》

發布時間:2025/3/19 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 接口响应时组装响应json_企业实战之spring项目《接口响应体格式统一封装》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在之前的文章中我們有介紹過,如何更好、更簡單的寫好一個接口(接口返回值篇),今天的這篇文章我們主要介紹,怎么統一處理下接口的返回格式問題。

問題分析

我們先來分析下我們所面臨的問題在哪里,然后接著給出解決方案。在寫一個接口時,我們通常會先統一定義一下接口的返回格式是什么,然后在跟前端去對接,通常的返回格式大體兩種(我們以保存用戶為例):

1. 成功/失敗響應格式不一致(此種方式作為我們默認的接口響應方式)

保存用戶成功,響應體

  • 失敗響應體(下面的格式是spring boot默認的錯誤響應格式,只不過我們在其基礎上增加了一個code字段用于解釋更詳細的錯誤碼)

2.成功/失敗響應體格式一致

  • 保存用戶成功,響應體
  • 失敗響應體

那么如果我們想要的響應體格式是第二種,我們該如何寫我們的代碼呢?你可能想是這樣么?

PlatformResult.success()這段邏輯顯然很多余,每個方法都要這樣寫一遍,所以上述方式并不是我們想要的,我們要的是

我們加了一個自定義的注解@ResponseResult(PlatformResult.class),參數PlatformResult.class告訴這個Controller類下的所有方法都以這個類PlatformResult的格式進行返回,這個注解可以標記在類或方法上,好了,我們的目的明朗了許多,要做的就是標記這個注解讓它實現接口返回值格式控制這個功能,下面我們給出具體的實現方式。

實現思路

首先介紹下完成我們這次主要功能的幾個類:

Result 是返回格式類的父接口(所有返回格式類都需要繼承它)

PlatformResult 通用返回結果格式(我們上面說的第二種返回結果)

DefaultErrorResult 全局錯誤返回結果(我們上面說的第一種錯誤時的返回結果)

GlobalExceptionHandler全局異常處理

ResponseResult 注解類(用于在Controller上指定返回值格式類)

ResponseResultInterceptor 攔截器(主要用于將ResponseResult注解類的標記信息傳入ResponseResultHandler中)

ResponseResultHandler 響應體格式處理器(主要轉換邏輯都在這里)

代碼實現

下面將有一大片代碼襲來,要頂住!O(∩_∩)O哈哈~

1. Result 接口類

說明

理論上所有的返回格式類都需要實現該接口才能被使用

2. PlatformResult 通用返回結果

3. DefaultErrorResult 默認全局錯誤返回格式

4. GlobalExceptionHandler 全局錯誤異常處理器

BaseGlobalExceptionHandler 全局異常處理基礎類

說明

上面用到了一些自定義異?;?BusinessException),對于這個類它會有很多子類去繼承它,例如:

參數異常、數據已存在異常、無權限異常等等,這些類我們會在后面的文章給大家分享下

5. ResponseResult 注解類

說明

這里我們默認PlatformResult使用這個類作為返回格式,所以@ResponseResult 等價于@ResponseResult(PlatformResult.class)

6. ResponseResultInterceptor 攔截器

開啟攔截器

7. ResponseResultHandler 響應體格式處理器

說明

上述代碼用到了一個工具類(RequestContextHolderUtil)用于獲取request對象,如果感興趣可以看下這篇文章 工具類分享之《RequestContextHolderUtil》

@ControllerAdvice、ResponseBodyAdvice這兩個類是本功能的關鍵使用類,用于接口的響應體增強,其中supports方法用于判斷是否需要做增強轉化,beforeBodyWrite方法用于增加邏輯實現

supports方法中,加了個小功能,當調用人員不想要封裝結果時,可以在header上設置參數Api-Style=none

最后我們寫一個創建用戶的Controller層方法:

總結

以上是生活随笔為你收集整理的接口响应时组装响应json_企业实战之spring项目《接口响应体格式统一封装》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。