国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

springboot全局統(tǒng)一返回處理

這篇具有很好參考價值的文章主要介紹了springboot全局統(tǒng)一返回處理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

項目中一般都會有規(guī)定好的接口返回格式,無論成功與失敗,一般格式都是不變的,這樣是為了方便前后端統(tǒng)一處理,今天就來說下前后端統(tǒng)一處理的較為優(yōu)雅的方式;


一、統(tǒng)一的返回格式

一般而言都會有一個統(tǒng)一的返回類作為接口的返回數(shù)據(jù)的封裝,例如:

@Data
public class Result<T> implements Serializable {

    private int code = HttpStatus.OK.value();

    private String msg;

    private T data;


    public static <T> Result<T> success() {
        return success(null);
    }


    public static <T> Result<T> failure() {
        return failure(HttpStatus.BAD_REQUEST.value(),HttpStatus.BAD_REQUEST.getReasonPhrase());
    }

    public static <T> Result<T> success(T data) {
        return new Result<T>(HttpStatus.OK.value(), HttpStatus.OK.getReasonPhrase(), data);
    }

    public static <T> Result<T> failure(int errorCode, String errorMsg) {
        return failure(errorCode, errorMsg, null);
    }

    public static <T> Result<T> failure(int code, String errorMsg, T data) {
        return new Result<T>(code, errorMsg, data);
    }

    public Result(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

}

然后我們通過此類作為返回參數(shù)的統(tǒng)一封裝,這樣無論成功與否,都是三個參數(shù)
code msg data

二、全局異常處理

  • 項目中難免會有異常拋出
    1. 服務端報錯的異常
    2. 處理邏輯中的異常(參數(shù)校驗, 邏輯不通等)
  • 由于我們一般都是前后端分離項目,所以都是接口方式的返回,那么我們只需要處理接口就可以了
@RestControllerAdvice
@Slf4j
public class ControllerExceptionHandel {

    @ExceptionHandler(ValidationException.class)
    public Result<String> handleException(ValidationException e) {
        e.printStackTrace();
        log.error("參數(shù)校驗發(fā)生異常:{}", e.getMessage());
        return Result.failure(HttpStatus.BAD_REQUEST.value(), e.getMessage());
    }

    @ExceptionHandler(value = NullPointerException.class)
    public Result<String> exceptionHandler(NullPointerException e) {
        e.printStackTrace();
        log.error("空指針異常:{}", e.getMessage());
        return Result.failure(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
    }

    @ExceptionHandler(value = {Exception.class, RuntimeException.class})
    public Result<String> exceptionHandler(Exception e) {
        e.printStackTrace();
        log.error("運行時發(fā)生異常:{}", e.getMessage());
        return Result.failure(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
    }

    @ExceptionHandler(AsyncRequestTimeoutException.class)
    public Result<String> handException(AsyncRequestTimeoutException e) {
        e.printStackTrace();
        log.error("運行時超時異常:{}", e.getMessage());
        return Result.failure(HttpStatus.BAD_REQUEST.value(), e.getMessage());
    }
}

一般來說控制器可以這樣用

@RestController
@RequestMapping("lang")
public class LangController {
    @RequestMapping("get")
    public Result get(){
        return Result.success(LocalUtil.get("demo"));
    }
}

三、全局返回處理(裝逼用的)

還是上面的全局異常處理,不過要增加點東西

  • 實現(xiàn)ResponseBodyAdvice接口
  • 實現(xiàn)兩個方法
    完整代碼如下:
@RestControllerAdvice
@Slf4j
public class ControllerExceptionHandel implements ResponseBodyAdvice<Object>{

    @Autowired
    private ObjectMapper objectMapper;

    @ExceptionHandler(ValidationException.class)
    public Result<String> handleException(ValidationException e) {
        e.printStackTrace();
        log.error("參數(shù)校驗發(fā)生異常:{}", e.getMessage());
        return Result.failure(HttpStatus.BAD_REQUEST.value(), e.getMessage());
    }

    @ExceptionHandler(value = NullPointerException.class)
    public Result<String> exceptionHandler(NullPointerException e) {
        e.printStackTrace();
        log.error("空指針異常:{}", e.getMessage());
        return Result.failure(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
    }

    @ExceptionHandler(value = {Exception.class, RuntimeException.class})
    public Result<String> exceptionHandler(Exception e) {
        e.printStackTrace();
        log.error("運行時發(fā)生異常:{}", e.getMessage());
        return Result.failure(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
    }

    @ExceptionHandler(AsyncRequestTimeoutException.class)
    public Result<String> handException(AsyncRequestTimeoutException e) {
        e.printStackTrace();
        log.error("運行時超時異常:{}", e.getMessage());
        return Result.failure(HttpStatus.BAD_REQUEST.value(), e.getMessage());
    }

    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }

    @SneakyThrows
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {

        Class<?> returnClass = returnType.getMethod().getReturnType();
        if (body instanceof String || Objects.equals(returnClass, String.class)) {
            return objectMapper.writeValueAsString(Result.success(body));
        }
        if (body instanceof Result) {
            return body;
        }
        return Result.success(body);
    }
}

這樣控制器中既可以像之前那樣使用,還可以像如下使用
它會自動封裝返回結果,無需手動封裝

@RestController
@RequestMapping("lang")
public class LangController {

    @RequestMapping("get")
    public String get(){
        return LocalUtil.get("demo");
    }
}

總結

如果項目中按照這種方式 @RestControllerAdvice + ResponseBodyAdvice接口,就能實現(xiàn)大部分的統(tǒng)一返回出參功能了,無論是正常請求還是異常請求,無論是簡單類型還是集合返回,相當于都有了統(tǒng)一的封裝處理;
快試試,用到項目中吧~文章來源地址http://www.zghlxwxcb.cn/news/detail-638686.html

到了這里,關于springboot全局統(tǒng)一返回處理的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Spring Boot 統(tǒng)一功能處理(攔截器實現(xiàn)用戶登錄權限的統(tǒng)一校驗、統(tǒng)一異常返回、統(tǒng)一數(shù)據(jù)格式返回)

    Spring Boot 統(tǒng)一功能處理(攔截器實現(xiàn)用戶登錄權限的統(tǒng)一校驗、統(tǒng)一異常返回、統(tǒng)一數(shù)據(jù)格式返回)

    目錄 1. 用戶登錄權限校驗 1.1 最初用戶登錄權限效驗 1.2 Spring AOP 用戶統(tǒng)?登錄驗證 1.3 Spring 攔截器 (1)創(chuàng)建自定義攔截器 (2)將自定義攔截器添加到系統(tǒng)配置中,并設置攔截的規(guī)則 1.4 練習:登錄攔截器 (1)實現(xiàn) UserController 實體類 (2)返回的登錄頁面:login.html (3)實

    2024年02月12日
    瀏覽(59)
  • 【Spring Boot統(tǒng)一功能處理】統(tǒng)一異常處理,統(tǒng)一的返回格式,@ControllerAdvice簡單分析,即將走進SSM項目的大門! ! !

    【Spring Boot統(tǒng)一功能處理】統(tǒng)一異常處理,統(tǒng)一的返回格式,@ControllerAdvice簡單分析,即將走進SSM項目的大門! ! !

    前言: 大家好,我是 良辰丫 ,在上一篇文章中我們已經(jīng)學習了一些統(tǒng)一功能處理的相關知識,今天我們繼續(xù)深入學習這些知識,主要學習統(tǒng)一異常處理,統(tǒng)一的返回格式,@ControllerAdvice簡單分析.?????? ??個人主頁:良辰針不戳 ??所屬專欄:javaEE進階篇之框架學習 ??勵志語句:生

    2024年02月16日
    瀏覽(36)
  • java全局捕捉異常并返回統(tǒng)一返回值

    java全局捕捉異常并返回統(tǒng)一返回值

    1. 首先定義全局異常處理類 2. 當全局有接口返回已經(jīng)定義的全局捕捉的異常,就會調用上面的接口統(tǒng)一返回信息 3. 統(tǒng)一返回錯誤頁面 Error.html 當前端訪問/getJobList接口時如果微服務的其他模塊還未啟動IllegalStateException異常就會被攔截從而重定向到Error頁面,并輸出錯誤信息:

    2024年02月12日
    瀏覽(19)
  • Spring Boot進階(45): Spring Boot 開發(fā)必備技能:如何優(yōu)雅地返回統(tǒng)一結果包裝!

    ? ? ? ? 在實際的開發(fā)中,我們常常需要對 API 接口的返回結果進行統(tǒng)一的包裝,以方便客戶端的處理和異常情況的統(tǒng)一處理。例如,我們可能需要對 API 接口返回結果進行統(tǒng)一的格式處理,將所有的異常情況都轉化為統(tǒng)一的錯誤類型,同時也可能需要對返回結果進行統(tǒng)一的加

    2024年02月07日
    瀏覽(28)
  • SpringBoot統(tǒng)一異常處理和統(tǒng)一返回格式

    SpringBoot統(tǒng)一異常處理和統(tǒng)一返回格式

    上篇博客我們講解了使用AOP來進行統(tǒng)一的用戶登錄判斷,其實像這種功能統(tǒng)一且使用較多的地方,都可以用AOP來處理,除了統(tǒng)?的?戶登錄判斷之外,AOP 還可以實現(xiàn): 統(tǒng)??志記錄 統(tǒng)??法執(zhí)?時間統(tǒng)計 (在性能優(yōu)化階段,監(jiān)控流量,接口的響應時間等甚至每個方法的響應

    2024年02月15日
    瀏覽(21)
  • SpringBoot 全局異常統(tǒng)一處理:BindException(綁定異常)

    SpringBoot 全局異常統(tǒng)一處理:BindException(綁定異常)

    在Spring Boot應用中,數(shù)據(jù)綁定是一個至關重要的環(huán)節(jié),它負責將HTTP請求中的參數(shù)映射到控制器方法的入?yún)ο笊?。在這個過程中如果遇到問題,如參數(shù)缺失、類型不匹配或驗證失敗等,Spring MVC將會拋出一個 org.springframework.validation.BindException 異常。本文將深入解析 BindExceptio

    2024年01月18日
    瀏覽(19)
  • 一文教你處理SpringBoot統(tǒng)一返回格式

    一文教你處理SpringBoot統(tǒng)一返回格式

    相信大部分后端開發(fā)人員在日常開發(fā)中都需要和前端對接,當然前后端都是你自己一個人搞的話可以想怎么玩就怎么玩,但是我們還是要做到一定的規(guī)范性。在前后端分離的項目中后端返回的格式一定要友好,并且固定,不能經(jīng)常變來變去,不然會對前端的開發(fā)人員帶來很多

    2024年02月11日
    瀏覽(23)
  • 【Spring Boot 】Spring Boot 統(tǒng)一功能處理

    【Spring Boot 】Spring Boot 統(tǒng)一功能處理

    ?????? 點進來你就是我的人了 博主主頁: ?????? 戳一戳,歡迎大佬指點! 歡迎志同道合的朋友一起加油喔 ?????? 目錄 前言 1.?Spring 攔截器 1.1?自定義攔截器 1.2 將自定義攔截器加入到系統(tǒng)配置中 1.3?攔截器實現(xiàn)原理 統(tǒng)一訪問前綴添加 (擴展) 2. 統(tǒng)一異常的處理 (@Co

    2024年02月09日
    瀏覽(19)
  • Spring Boot 統(tǒng)一功能處理

    Spring Boot 統(tǒng)一功能處理

    ??作者:銀河罐頭 ??系列專欄:JavaEE ?? “種一棵樹最好的時間是十年前,其次是現(xiàn)在” Spring Boot 統(tǒng)?功能處理模塊,也是 AOP 的實戰(zhàn)環(huán)節(jié)。 Spring 中提供了具體的實現(xiàn)攔截器:HandlerInterceptor,攔截器的實現(xiàn)分為以下兩個步 驟: 創(chuàng)建?定義攔截器,實現(xiàn) HandlerInterceptor 接

    2024年02月08日
    瀏覽(22)
  • 【規(guī)范】SpringBoot接口返回結果及異常統(tǒng)一處理,這樣封裝才優(yōu)雅

    【規(guī)范】SpringBoot接口返回結果及異常統(tǒng)一處理,這樣封裝才優(yōu)雅

    博友的需求就是我最大的動力 博友一說話,本狗笑哈哈。 博友要我寫啥,我就寫啥 。 特來一篇關于 SpringBoot接口返回結果及異常統(tǒng)一處理 ,雖說封不封裝都能用,但咱后端也得給前端小姐姐留個好印象不是。項目前后端分離, 規(guī)范的數(shù)據(jù)傳輸格式,讓REST風格的API具有簡單

    2024年02月08日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包