統一返回對象封裝和統一異常捕獲封裝springboot starter

来源:https://www.cnblogs.com/liangxianning/archive/2023/01/17/17058195.html
-Advertisement-
Play Games

好久沒有更新文章了,高齡開發沒什麼技術,去了外包公司後沒怎麼更新文章了。今天分享下統一處理starter,相信開發web系統的時候都是會涉及到前後端的交互,而後端返回數據的時候一般都會統一封裝一個返回對象和統一處理異常,一般情況下都是在controller的每個方法中調用封裝的對象,把相應的數據塞到 ...


好久沒有更新文章了,高齡開發沒什麼技術,去了外包公司後沒怎麼更新文章了。今天分享下統一處理starter,相信開發web系統的時候都是會涉及到前後端的交互,而後端返回數據的時候一般都會統一封裝一個返回對象和統一處理異常,一般情況下都是在controller的每個方法中調用封裝的對象,把相應的數據塞到data欄位,然後返回給前端。而異常處理則是拋出某個業務異常,然後利用spring切麵進行攔截處理。每個項目都需要做這些重覆的動作,所以我把這個處理封裝成了starter,下麵介紹已下這個starter的使用,最後給出git庫供大家學習交流。

添加依賴

添加統一處理依賴

<dependency>  
    <groupId>io.gitee.javalaoniu</groupId>  
    <artifactId>jud-springboot-starter</artifactId>  
    <version>0.0.1</version>  
</dependency>

啟用統一處理

添加 @EnableUnifiedDisposal 註解

import io.gitee.javalaoniu.jud.annotation.EnableUnifiedDisposal;  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
  
@EnableUnifiedDisposal  
@SpringBootApplication  
public class JudDemoApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(JudDemoApplication.class, args);  
    }  
}

攔截的處理

像平常一樣返回數據即可,不需要做其它

import io.gitee.javalaoniu.jud.annotation.IgnoreResponseAdvice;  
import io.gitee.javalaoniu.jud.common.Result;  
import io.gitee.javalaoniu.jud.exception.BusinessException;  
import io.gitee.javalaoniu.jud.exception.ExceptionCode;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RestController;  
  
import java.util.ArrayList;  
import java.util.List;  
  
@RestController  
public class DemoController {  
  
    @GetMapping("test1")  
    public String stringTest() {  
        return "hello";  
        // {"code":200,"data":"hello","succ":true,"ts":1673943672244}
    }  
  
    @GetMapping("test2")  
    public String stringNullTest() {  
        return null;  
        // {"code":200,"data":"","succ":true,"ts":1673943691844}
    }  
  
    @GetMapping("test3")  
    public Object objectEntityTest() {  
        DemoEntity demoEntity = new DemoEntity();  
        demoEntity.setName("張三");  
        demoEntity.setAge(50);  
        demoEntity.setSex(false);  
        demoEntity.setSalary(4500000001542.26);  
        return demoEntity;  
        // {"succ":true,"ts":1673943709119,"data":{"name":"張三","age":50,"sex":false,"salary":4.50000000154226E12},"code":200,"msg":null}
    }  
  
    @GetMapping("test4")  
    public Object objectNotNullTest() {  
        return "hello Object";  
        // {"code":200,"data":"hello Object","succ":true,"ts":1673943726435}
    }  
  
    @GetMapping("test5")  
    public Object objectNullTest() {  
        return null;  
        // 啥也沒返回,但是如果配置了json轉換器的話會返回:{"code":200,"data":null,"succ":true,"ts":1673943726435}
    }  
  
    @GetMapping("test6")  
    public List<DemoEntity> listTest() {  
        DemoEntity demoEntity2 = new DemoEntity();  
        demoEntity2.setName("張三");  
        demoEntity2.setAge(50);  
        demoEntity2.setSex(false);  
        demoEntity2.setSalary(4500000001542.26);  
  
        DemoEntity demoEntity = new DemoEntity();  
        demoEntity.setName("張三");  
        demoEntity.setAge(50);  
        demoEntity.setSex(false);  
        demoEntity.setSalary(4500000001542.26);  
  
        List<DemoEntity> list = new ArrayList<>();  
        list.add(demoEntity);  
        list.add(demoEntity2);  
  
        return list;  
        // {"succ":true,"ts":1673943797079,"data":[{"name":"張三","age":50,"sex":false,"salary":4.50000000154226E12},{"name":"張三","age":50,"sex":false,"salary":4.50000000154226E12}],"code":200,"msg":null}
    }  
  
    @GetMapping("test7")  
    public List<String> listNullTest() {  
        return null;  
        // {"succ":true,"ts":1673943819382,"data":null,"code":200,"msg":null}
    }  
  
    @GetMapping("test8")  
    public Result resultTest() {  
        DemoEntity demoEntity = new DemoEntity();  
        demoEntity.setName("張三");  
        demoEntity.setAge(50);  
        demoEntity.setSex(false);  
        demoEntity.setSalary(4500000001542.2656564545);  
        return Result.success(demoEntity);  
        // {"succ":true,"ts":1673943832081,"data":{"name":"張三","age":50,"sex":false,"salary":4.500000001542266E12},"code":200,"msg":null}
    }  
  
    @IgnoreResponseAdvice  
    @GetMapping("test9")  
    public String ignoreResponseTest() {  
        return "IgnoreResponseAdvice";  
        // IgnoreResponseAdvice
    }  
  
    @GetMapping("test10")  
    public String businessExceptionTest() {  
        throw new BusinessException(ExceptionCode.EXCEPTION);  
        // {"succ":false,"ts":1673943862588,"data":null,"code":500,"msg":"伺服器開小差,請稍後再試(Internal Server Error)"}
    }  
}

不攔截處理

對不需要統一處理的controller或者方法使用下麵註解

@IgnoreResponseAdvice  
@GetMapping("test9")  
public String ignoreResponseTest() {  
	// 在方法上使用,直接返回IgnoreResponseAdvice字元串給前端
    return "IgnoreResponseAdvice";  
}

可以看到,使用統一處理starter後,統一返回對象和統一異常處理不需要自己在處理,非常方便。
git倉庫地址:https://gitee.com/javalaoniu/javalaoniu-jud


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CAP特性 ​ CAP理論是在設計分散式系統的過程中,處理數據一致性問題時必須考慮的理論,一個分散式系統最多只能同時滿足一致性(Consistence)、可用性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項。 2000年7月Eric Brewer教授 ...
  • 前言 今日偶然打開 $oi-wiki$,發現樹形 $DP$ 例題正好是之前在洛谷上鴿著的一道題。所以...... $\color{red}{很高興以這樣的方式認識你,樹形 DP !}$ 這例題造的太好了,簡直是無痛入門(感動.jpg) P1352 沒有上司的舞會 題目傳送門~ 思路剖析 狀態定義 $ ...
  • 數據類型的內置方法 什麼是數據類型的內置方法? ​ ==數據類型自帶的操作方法或功能== 調用數據類型的內置的方法的方式是: ​ ==句點符== 數據類型.方法名() eg: 變數名.方法名() 數據值.方法名() 1.整型相關操作方法 類型轉換 int(待轉換的數據類型) 1.浮點型可以轉整型 ' ...
  • 下載jdk安裝包 進入Oracle官網進行下載:Java Downloads | Oracle 鏡像源也可以下載 為什麼配置環境變數 系統在運行命令和程式的時候先從當前目錄進行查找,找不到會去配置的環境變數裡面找 配置環境變數的目的是為了命令行在各個位置都能訪問 平時用IDEA集成開發工具不非得配置 ...
  • 1 簡介 DB2是IBM的一款優秀的關係型資料庫,簡單學習一下。 2 Docker安裝DB2 為了快速啟動,直接使用Docker來安裝DB2。先下載鏡像如下: docker pull ibmcom/db2:11.5.0.0 啟動資料庫如下: docker run -itd \ --name mydb ...
  • Spring管理Bean-IOC-02 2.基於XML配置bean 2.7通過util空間名稱創建list BookStore.java: package com.li.bean; import java.util.List; /** * @author 李 * @version 1.0 */ pu ...
  • Spring6 Spring項目的創建 打開IDEA,新建一個maven項目 在maven項目中引入spring的倉庫和依賴 <repositories> <repository> <id>repository.spring.milestone</id> <name>Spring Milestone ...
  • 2023-01-17 一、Spring中的註解 1、使用註解的原因 (1)使用註解將對象裝配到IOC容器中 (2)使用註解管理對象之間依賴關係(自動裝配) 2、Spring中裝配對象的註解 (1)@Component 標識一個受Spring IOC容器管理的普通組件 (2)@Repository 標 ...
一周排行
    -Advertisement-
    Play Games
  • 就像 Web Api 介面可以對入參進行驗證,避免用戶傳入非法的或者不符合我們預期的參數一樣,選項也可以對配置源的內容進行驗證,避免配置中的值與選項類中的屬性不對應或者不滿足預期,畢竟大部分配置都是通過字元串的方式,驗證是很有必要的。 1. 註解驗證 像入參驗證一樣,選項驗證也可以通過特性註解方便地 ...
  • 原文作者:aircraft 原文鏈接:https://www.cnblogs.com/DOMLX/p/17270107.html 加工的泛型類如下: using System; using System.Collections.Generic; using System.IO; using Syst ...
  • 在前一篇文章,我們瞭解瞭如何通過.NET6+Quartz開發基於控制台應用程式的定時任務,今天繼續在之前的基礎上,進一步講解基於ASP.NET Core MVC+Quartz實現定時任務的可視化管理頁面,僅供學習分享使用,如有不足之處,還請指正。 涉及知識點 Quartz組件,關於Quartz組件的 ...
  • 面向對象1 面向對象,更在乎的結果,而過程的實現並不重要 IDea快捷鍵(基礎版) | 快捷鍵 | 作用 | | | | | ctrl + / | 快捷註釋 | | ctrl + shift + / | 多行註釋 | | ctrl + d | 快速複製 | | ctrl + shift + up/d ...
  • NX中的checkmate功能是用於檢查模型、圖紙數據的工具,在UGOPEN中有例子。手動操作可以檢查已載入的裝配下所有零部件,可以設置通過後保存模型,檢查結果保存到Teamcenter中,預設保存在零組件版本下。 代碼中可以設置多個檢查規則。相關設置可以在用戶預設設置中進行設置。 1 // 2 / ...
  • JavaSE 運算符 算術運算符:+,-,*,/,%,++(自增),--(自減) i++:先用後+1;++i:先+1後用 賦值運算符:= 擴展賦值運算符:+=,-=,*=,/= a+=b >a=a+b: ​ 可讀性差,但是編譯效率高,且會自動進行類型轉換; ​ 當ab為基本數據類型時,a+b和b+a ...
  • 面向對象2 訪問修飾符 | | private | default | protected | public | | | | | | | | 當前類 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_che ...
  • 推薦一些學習qml教程 Qt官方的QML教程: https://doc.qt.io/qt-5/qtqml-index.html 這是一個由Qt官方提供的完整的QML教程,包含了所有基本知識和高級語法。 QML中文網:http://www.qmlcn.com/ 這是一個非常不錯的中文QML學習網站,提 ...
  • QAbstractBUtton: 所有按鈕控制項的基類 提供按鈕的通用功能 繼承自QWidget 屬於抽象類別,不能直接去使用,必須藉助於子類(除非你覺得子類不夠用,想自定義一個按鈕) 大部分功能之前已經使用過,在這裡只作簡單介紹 文本設置: setText(str) :設置按鈕提示文本 text() ...
  • 使用 VLD 記憶體泄漏檢測工具輔助開發時整理的學習筆記。本篇介紹 VLD 配置文件中配置項 StartDisabled 的使用方法。 ...