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

SpringBoot定義優(yōu)雅全局統(tǒng)一Restful API 響應(yīng)框架二

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot定義優(yōu)雅全局統(tǒng)一Restful API 響應(yīng)框架二。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

這里解決之前留下來(lái)的問(wèn)題,當(dāng)程序沒(méi)有正常返回時(shí)候

就是程序由于運(yùn)行時(shí)異常導(dǎo)致的結(jié)果,有些異常我們可,能無(wú)法提前預(yù)知,不能正常走到我們r(jià)eturn的R對(duì)象返回。這個(gè)時(shí)候該如何處理

在SpringBoot中,可以使用@ControllerAdvice注解來(lái)啟用全局異常處理。通過(guò)使用@ControllerAdvice注解,可以捕獲應(yīng)用程序中的所有異常,從而實(shí)現(xiàn)統(tǒng)一的異常處理。如果要自定義異常處理方法,可以使用@ExceptionHandler注解,并指定要捕獲的異常類型。這樣就可以對(duì)指定的異常進(jìn)行統(tǒng)一的處理。因此,通過(guò)@ControllerAdvice和@ExceptionHandler注解的組合,可以實(shí)現(xiàn)全局的異常處理。

代碼示列

package cn.soboys.springbootrestfulapi.common.exception;


import cn.soboys.springbootrestfulapi.common.resp.R;
import cn.soboys.springbootrestfulapi.common.resp.ResultCodeEnum;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.stream.Collectors;


/**
 * @author 公眾號(hào) 程序員三時(shí)
 * @version 1.0
 * @date 2023/4/29 00:21
 * @webSite https://github.com/coder-amiao
 * 統(tǒng)一異常處理器
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 通用異常處理方法
     **/
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public R error(Exception e) {
        e.printStackTrace();
        return R.setResult(ResultCodeEnum.INTERNAL_SERVER_ERROR);
    }

    /**
     * 指定異常處理方法
     **/
    @ExceptionHandler(NullPointerException.class)
    @ResponseBody
    public R error(NullPointerException e) {
        e.printStackTrace();
        return R.setResult(ResultCodeEnum.NULL_POINT);
    }


    /**
     * 處理Get請(qǐng)求中 使用@Valid 驗(yàn)證路徑中請(qǐng)求實(shí)體校驗(yàn)失敗后拋出的異常
     */
    @ExceptionHandler(BindException.class)
    @ResponseBody
    public R BindExceptionHandler(BindException e) {
        String message = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining());
        return R.failure().code(ResultCodeEnum.PARAM_ERROR.getCode()).message(message);
    }

    /**
     * 處理Get請(qǐng)求中  使用@Validated 驗(yàn)證路徑中 單個(gè)參數(shù)請(qǐng)求失敗拋出異常
     * @param e
     * @return
     */
    @ExceptionHandler(ConstraintViolationException.class)
    public R ConstraintViolationExceptionHandler(ConstraintViolationException e) {
        String message = e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining());
        return R.failure().code(ResultCodeEnum.PARAM_ERROR.getCode()).message(message);
    }



    /**
     * 自定義異常處理方法
     *
     * @param e
     * @return
     */
    @ExceptionHandler(BusinessException.class)
    @ResponseBody
    public R error(BusinessException e) {
        e.printStackTrace();
        return R.failure().message(e.getMessage()).code(e.getCode());
    }

}

異常處理,能夠減少代碼的重復(fù)度和復(fù)雜度,有利于代碼的維護(hù),并且能夠快速定位到BUG,大大提高我們的開發(fā)效率。

通過(guò)@ControllerAdvice 返回對(duì)應(yīng)錯(cuò)誤視圖頁(yè)面,@RestControllerAdvice 返回json 格式的錯(cuò)誤api,也可以通過(guò)@ControllerAdvice 在方法上加上@ResponseBody返回對(duì)應(yīng)json格式, 類比,controller中返回是一樣的

這樣暫時(shí)解決了,我們上一片文章留下問(wèn)題

SpringBoot定義優(yōu)雅全局統(tǒng)一Restful API 響應(yīng)框架二

思考

其實(shí)這樣寫,還是不夠完美,我們知道我們錯(cuò)誤類型有很多種,參數(shù)錯(cuò)誤也有很多,參數(shù)校驗(yàn)還沒(méi)有達(dá)到框架級(jí)別,

例如這個(gè)是阿里云ECS錯(cuò)誤

{
	"RequestId": "5E571499-13C5-55E3-9EA6-DEFA0DBC85E4",
	"HostId": "ecs-cn-hangzhou.aliyuncs.com",
	"Code": "InvalidOperation.NotSupportedEndpoint",
	"Message": "The specified endpoint can't operate this region. Please use API DescribeRegions to get the appropriate endpoint, or upgrade your SDK to latest version.",
	"Recommend": "https://next.api.aliyun.com/troubleshoot?q=InvalidOperation.NotSupportedEndpoint&product=Ecs"
}

這是新浪api的

{
	"request": "/statuses/home_timeline.json",
	"error_code": "20502",
	"error": "Need you follow uid."
}

或者說(shuō)這樣

{
  "result": false,
  "error": {"code": 102, "message": "Validation failed: Wrong NAME."}
}

我們?nèi)绾卧谶M(jìn)一步改進(jìn)呢,

下一篇文章會(huì)繼續(xù)分享,留下你的思考

準(zhǔn)備從零做一套自己的開發(fā)腳手架模板 ,關(guān)注公眾 程序員三時(shí)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-433240.html

到了這里,關(guān)于SpringBoot定義優(yōu)雅全局統(tǒng)一Restful API 響應(yīng)框架二的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微服務(wù)間請(qǐng)求響應(yīng)定義方式對(duì)比 (Apache Dubbo, IDL 定義,RESTful API)

    1. Apache Dubbo 分布式RPC Apache Dubbo 是一種分布式服務(wù)框架,它提供了一種透明的 RPC 機(jī)制,可以讓服務(wù)之間像調(diào)用本地方法一樣進(jìn)行調(diào)用。Dubbo 使用 IDL 來(lái)定義服務(wù)接口,并使用各種協(xié)議(如 HTTP、Dubbo 協(xié)議等)進(jìn)行通信。 優(yōu)點(diǎn): 透明化調(diào)用:無(wú)需關(guān)心服務(wù)部署細(xì)節(jié),就像調(diào)用本

    2024年02月19日
    瀏覽(44)
  • Forest-聲明式HTTP客戶端框架-集成到SpringBoot實(shí)現(xiàn)調(diào)用第三方restful api并實(shí)現(xiàn)接口數(shù)據(jù)轉(zhuǎn)換

    Forest-聲明式HTTP客戶端框架-集成到SpringBoot實(shí)現(xiàn)調(diào)用第三方restful api并實(shí)現(xiàn)接口數(shù)據(jù)轉(zhuǎn)換

    聲明式HTTP客戶端API框架,讓Java發(fā)送HTTP/HTTPS請(qǐng)求不再難。它比OkHttp和HttpClient更高層, 是封裝調(diào)用第三方restful api client接口的好幫手,是retrofit和feign之外另一個(gè)選擇。 通過(guò)在接口上聲明注解的方式配置HTTP請(qǐng)求接口。 官網(wǎng): Forest ? 代碼地址: forest: 聲明式HTTP客戶端API框架,讓

    2024年02月04日
    瀏覽(25)
  • Java Restful API接口獲取請(qǐng)求頭、請(qǐng)求體、以及設(shè)置響應(yīng)狀態(tài)碼、應(yīng)答(響應(yīng))體等

    一、獲取請(qǐng)求頭 接口示例1: 1、從 request?對(duì)象中獲取請(qǐng)求頭: 二、獲取請(qǐng)求體 1、從 request?對(duì)象中,使用緩沖流讀取器、stream流等方式獲取請(qǐng)求體 推薦寫法一:

    2024年02月16日
    瀏覽(42)
  • 一站式統(tǒng)一返回值封裝、異常處理、異常錯(cuò)誤碼解決方案—最強(qiáng)的Sping Boot接口優(yōu)雅響應(yīng)處理器

    作者:京東物流?覃玉杰 Graceful Response是一個(gè)Spring Boot體系下的優(yōu)雅響應(yīng)處理器,提供一站式統(tǒng)一返回值封裝、異常處理、異常錯(cuò)誤碼等功能。 使用Graceful Response進(jìn)行web接口開發(fā)不僅可以節(jié)省大量的時(shí)間,還可以提高代碼質(zhì)量,使代碼邏輯更清晰。 強(qiáng)烈推薦你花3分鐘學(xué)會(huì)它!

    2024年02月03日
    瀏覽(23)
  • springboot全局統(tǒng)一返回處理

    項(xiàng)目中一般都會(huì)有規(guī)定好的接口返回格式,無(wú)論成功與失敗,一般格式都是不變的,這樣是為了方便前后端統(tǒng)一處理,今天就來(lái)說(shuō)下前后端統(tǒng)一處理的較為優(yōu)雅的方式; 一般而言都會(huì)有一個(gè)統(tǒng)一的返回類作為接口的返回?cái)?shù)據(jù)的封裝,例如: 然后我們通過(guò)此類作為返回參數(shù)的統(tǒng)一封裝

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

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

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

    2024年02月08日
    瀏覽(27)
  • SpringBoot生成RESTful API文檔

    SpringBoot生成RESTful API文檔

    由于我一開始學(xué)習(xí)的SpringBoot是3以上版本,所以我這里用到的也是支持和SpringBoot3能夠整合的SpringDoc 這里先說(shuō)一下,其實(shí)SpringDoc就是Swagger3版本,我一開始整合的2版本,比較麻煩況且最后SpringBoot程序都啟動(dòng)不了了,后面查資料才看到SpringDoc,好使的一批!! 官網(wǎng)地址:http:

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

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

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

    2024年01月18日
    瀏覽(19)
  • Node后端框架Express與Koa接口統(tǒng)一響應(yīng)封裝

    Node后端框架Express與Koa接口統(tǒng)一響應(yīng)封裝

    以前在寫 SpringBoot 全棧開發(fā)的系列文章中全棧開發(fā)之后端腳手架:SpringBoot集成MybatisPlus代碼生成,分頁(yè),雪花算法,統(tǒng)一響應(yīng),異常攔截,Swagger3接口文檔,有提到對(duì)后端接口的響應(yīng)數(shù)據(jù)進(jìn)行統(tǒng)一的封裝,方便前端或者第三方進(jìn)行數(shù)據(jù)獲取與對(duì)接工作;統(tǒng)一響應(yīng)一般包含狀態(tài)

    2024年02月05日
    瀏覽(29)
  • 【Go Web開發(fā)】Web初識(shí)、RESTful架構(gòu)和RESTful API詳解、Gin框架的安裝和簡(jiǎn)單使用

    【Go Web開發(fā)】Web初識(shí)、RESTful架構(gòu)和RESTful API詳解、Gin框架的安裝和簡(jiǎn)單使用

    博主簡(jiǎn)介: 努力學(xué)習(xí)的大一在校計(jì)算機(jī)專業(yè)學(xué)生,熱愛學(xué)習(xí)和創(chuàng)作。目前在學(xué)習(xí)和分享:數(shù)據(jù)結(jié)構(gòu)、Go,Java等相關(guān)知識(shí)。 博主主頁(yè): @是瑤瑤子啦 所屬專欄: Go語(yǔ)言核心編程 近期目標(biāo): 寫好專欄的每一篇文章 全稱: “萬(wàn)維網(wǎng)”(World Wide Web) 本質(zhì): 系統(tǒng)(基于互聯(lián)網(wǎng)).

    2024年02月03日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包