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

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

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

背景

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

SpringBoot Controller 常見的返回格式

String

@PostMapping("/test")
public String test(){
    return "Hello World";
}
復(fù)制代碼

postman調(diào)用結(jié)果:

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

自定義對象

正常返回

    @PostMapping("/getUser")
    public ActionResult getUser(){
        User user = new User();
        user.setId(UUID.randomUUID().toString());
        user.setName("MrDong");
        user.setAge(20);
        return ActionResult.defaultOk(user);
    }
復(fù)制代碼

postman調(diào)用結(jié)果:

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

錯誤返回

   @PostMapping("/error")
    public ActionResult error(){
        return ActionResult.defaultFail(1000,"服務(wù)器異常,請聯(lián)系管理員");
    }
復(fù)制代碼

postman調(diào)用結(jié)果:

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

定義返回對象

我定義兩個ActionResult這個對象來對返回值進(jìn)行封裝,可以根據(jù)自己公司實(shí)際情況修改:

package com.wxd.entity;

import com.wxd.enums.ResultCodeEnum;
import lombok.Data;

/**
 * @ClassName ActionResult
 * @Description 統(tǒng)一返回值封裝
 * @Author Mr Dong
 * @Date 2022/7/26 14:51
 */
@Data
public class ActionResult {

    private Integer code;
    private String msg;
    private Integer count;
    private Object data;

    public static ActionResult defaultOk(Integer code, String msg, Integer count, Object data) {
        return new ActionResult(code, msg, count, data);
    }

    public static ActionResult defaultOk(Integer count, Object data) {
        return new ActionResult(ResultCodeEnum.RC200, count, data);
    }

    public static ActionResult defaultOk(Object data) {
        return new ActionResult(ResultCodeEnum.RC200, null, data);
    }

    public static ActionResult defaultOk() {
        return new ActionResult(ResultCodeEnum.RC200);
    }

    public static ActionResult defaultFail() {
        return new ActionResult(ResultCodeEnum.RC999);
    }

    public static ActionResult defaultFail(Integer code, String msg) {
        return new ActionResult(code, msg);
    }

    public static ActionResult defaultFail(ResultCodeEnum resultCodeEnum) {
        return new ActionResult(resultCodeEnum);
    }

    public ActionResult(Integer code, String msg, Integer count, Object data) {
        this.code = code;
        this.msg = msg;
        this.count = count;
        this.data = data;
    }

    public ActionResult(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public ActionResult(ResultCodeEnum resultCodeEnum) {
        this.code = resultCodeEnum.getCode();
        this.msg = resultCodeEnum.getMessage();
    }

    public ActionResult(ResultCodeEnum resultCodeEnum, Integer count, Object data) {
        this.code = resultCodeEnum.getCode();
        this.msg = resultCodeEnum.getMessage();
        this.count = count;
        this.data = data;
    }

}
復(fù)制代碼

定義狀態(tài)枚舉

package com.wxd.enums;

/**
 * @author wxd
 * @version V1.0
 * @description ResultCodeEnum
 * @date 2022/8/10 13:35
 **/
public enum ResultCodeEnum {
    /**
     * 操作成功
     */
    RC200(200, "操作成功"),
    /**
     * 未授權(quán)
     */
    RC401(401, "用戶未授權(quán)"),
    /**
     * 請求被禁止
     */
    RC403(403, "請求被禁止"),
    /**
     * 服務(wù)異常
     */
    RC500(500, "服務(wù)器異常,請聯(lián)系管理員"),
    /**
     * 操作失敗
     */
    RC999(999, "操作失敗"),

    RC1001(1001, "用戶名密碼錯誤"),
    RC1002(1002, "未授權(quán)的資源"),
    RC1003(1003, "未授權(quán)的資源"),
    RC1004(1004, "缺少請求參數(shù)異常"),
    RC1005(1005, "缺少請求體參數(shù)異常"),
    RC1006(1006, "參數(shù)綁定異常"),
    RC1007(1007, "方法參數(shù)無效異常");

    private Integer code;
    private String message;

    ResultCodeEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}
復(fù)制代碼

統(tǒng)一處理返回值及異常

實(shí)現(xiàn)原理:需要實(shí)現(xiàn)SpringBoot提供的ResponseBodyAdvice這個接口,完成統(tǒng)一返回值的封裝及異常的處理。實(shí)現(xiàn)了這個接口之后,在Controller返回的時候只需要將對象直接返回,有些不需要返回值的可以直接返回void。

package com.wxd.advice;

import com.wxd.entity.ActionResult;
import com.wxd.enums.ResultCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

/**
 * @version: V1.0
 * @author: wxd
 * @description: 全局異常處理以及返回值的統(tǒng)一封裝
 * @Date 2022/7/26 16:24
 */
@RestControllerAdvice(value = "com.wxd.controller")
@Slf4j
public class ResponseAdvice implements ResponseBodyAdvice {

    @Override
    public boolean supports(MethodParameter methodParameter, Class aClass) {
        return true;
    }

    /**
     * 統(tǒng)一包裝
     *
     * @param o
     * @param methodParameter
     * @param mediaType
     * @param aClass
     * @param serverHttpRequest
     * @param serverHttpResponse
     * @return
     */
    @Override
    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
        /**
         * String、ActionResult不需要再包一層(不想包一層ActionResult對象的可以在這里把這個對象過濾掉)
         */
        if (o instanceof String || o instanceof ActionResult) {
            return o;
        }
        return ActionResult.defaultOk(o);
    }

    /**
     * 系統(tǒng)內(nèi)部異常捕獲
     *
     * @param e
     * @return
     */
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler(value = Exception.class)
    public Object exceptionHandler(Exception e) {
        log.error("系統(tǒng)內(nèi)部異常,異常信息", e);
        return ActionResult.defaultFail(ResultCodeEnum.RC500);
    }


    /**
     * 忽略參數(shù)異常處理器;觸發(fā)例子:帶有@RequestParam注解的參數(shù)未給參數(shù)
     *
     * @param e 忽略參數(shù)異常
     * @return ResponseResult
     */
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(MissingServletRequestParameterException.class)
    public Object parameterMissingExceptionHandler(MissingServletRequestParameterException e) {
        log.error("缺少Servlet請求參數(shù)異常", e);
        return ActionResult.defaultFail(ResultCodeEnum.RC1004);
    }

    /**
     * 缺少請求體異常處理器;觸發(fā)例子:不給請求體參數(shù)
     *
     * @param e 缺少請求體異常
     * @return ResponseResult
     */
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(HttpMessageNotReadableException.class)
    public Object parameterBodyMissingExceptionHandler(HttpMessageNotReadableException e) {
        log.error("參數(shù)請求體異常", e);
        return ActionResult.defaultFail(ResultCodeEnum.RC1005);
    }


    /**
     * 統(tǒng)一處理請求參數(shù)綁定錯誤(實(shí)體對象傳參);
     *
     * @param e BindException
     * @return ResponseResult
     */
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(BindException.class)
    public Object validExceptionHandler(BindException e) {
        log.error("方法參數(shù)綁定錯誤(實(shí)體對象傳參)", e);
        return ActionResult.defaultFail(ResultCodeEnum.RC1006);
    }

    /**
     * 統(tǒng)一處理請求參數(shù)綁定錯誤(實(shí)體對象請求體傳參);
     *
     * @param e 參數(shù)驗(yàn)證異常
     * @return ResponseResult
     */
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public Object parameterExceptionHandler(MethodArgumentNotValidException e) {
        log.error("方法參數(shù)無效異常(實(shí)體對象請求體傳參)", e);
        return ActionResult.defaultFail(ResultCodeEnum.RC1007);
    }

}
復(fù)制代碼

void 無返回值

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

有返回值

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

?文章來源地址http://www.zghlxwxcb.cn/news/detail-506151.html

到了這里,關(guān)于一文教你處理SpringBoot統(tǒng)一返回格式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Springboot 設(shè)置統(tǒng)一的請求返回格式

    現(xiàn)在開發(fā)過程中主要采用前后端分離的方式進(jìn)行開發(fā)測試,也就是前端封裝請求,后端提供標(biāo)準(zhǔn)的API接口服務(wù)。一般現(xiàn)在json 格式受到開發(fā)者們的青睞,學(xué)習(xí)過程中我們可以設(shè)置接口的返回類型,那么怎么做到設(shè)置統(tǒng)一的返回格式呢?以下是在項(xiàng)目開發(fā)過程中一般的模式標(biāo)準(zhǔn)

    2024年02月13日
    瀏覽(21)
  • Spring Boot 統(tǒng)一功能處理(攔截器實(shí)現(xiàn)用戶登錄權(quán)限的統(tǒng)一校驗(yàn)、統(tǒng)一異常返回、統(tǒng)一數(shù)據(jù)格式返回)

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

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

    2024年02月12日
    瀏覽(58)
  • 【Spring Boot】攔截器與統(tǒng)一功能處理:統(tǒng)一登錄驗(yàn)證、統(tǒng)一異常處理與統(tǒng)一數(shù)據(jù)返回格式

    【Spring Boot】攔截器與統(tǒng)一功能處理:統(tǒng)一登錄驗(yàn)證、統(tǒng)一異常處理與統(tǒng)一數(shù)據(jù)返回格式

    ?Spring AOP是一個基于面向切面編程的框架,用于將橫切性關(guān)注點(diǎn)(如日志記錄、事務(wù)管理)與業(yè)務(wù)邏輯分離,通過代理對象將這些關(guān)注點(diǎn)織入到目標(biāo)對象的方法執(zhí)行前后、拋出異?;蚍祷亟Y(jié)果時等特定位置執(zhí)行,從而提高程序的可復(fù)用性、可維護(hù)性和靈活性。但使用原生Sp

    2024年02月16日
    瀏覽(25)
  • Spring Boot 統(tǒng)一數(shù)據(jù)返回格式 分析 和 處理

    Spring Boot 統(tǒng)一數(shù)據(jù)返回格式 分析 和 處理

    目錄 實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)格式 ?測試? ?原因分析 ?解決方案 ???個人主頁:Dikz12 ??格言:吾愚多不敏,而愿加學(xué) 歡迎大家??點(diǎn)贊?評論?收藏 統(tǒng)?的數(shù)據(jù)返回格式使? @ControllerAdvice 和 ResponseBodyAdvice 的?式實(shí)現(xiàn); @ControllerAdvice : 表?控制器通知類. 比如:添加類 ResponseAdvic

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

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

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

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

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

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

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

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

    2024年02月08日
    瀏覽(27)
  • 如何設(shè)計(jì) API 接口,實(shí)現(xiàn)統(tǒng)一格式返回?

    如何設(shè)計(jì) API 接口,實(shí)現(xiàn)統(tǒng)一格式返回?

    在移動互聯(lián)網(wǎng),分布式,微服務(wù)盛行的今天,現(xiàn)在項(xiàng)目絕大部分都采用的微服務(wù)框架,前分離分離方式,(題外話:前重新的工作分配越來越明確,現(xiàn)在的前端都稱為大前端,技術(shù)棧以及生態(tài)圈都已經(jīng)非常成熟;以前官員人員瞧不起前端人員,那現(xiàn)在高層人員要重新認(rèn)識一下

    2024年02月12日
    瀏覽(16)
  • SSMP整合案例(9) 統(tǒng)一表現(xiàn)層數(shù)據(jù)返回格式

    SSMP整合案例(9) 統(tǒng)一表現(xiàn)層數(shù)據(jù)返回格式

    上文 SSMP整合案例(8) Restful開發(fā)表現(xiàn)層接口 我們就已經(jīng)是把表現(xiàn)層的接口寫完了 但是 我們會發(fā)現(xiàn) 現(xiàn)在前端人員拿到我們的數(shù)據(jù) 格式看著非常的亂 我們 數(shù)據(jù)庫 添加 修改 刪除 就是但數(shù)據(jù)的格式 一個 布爾值 查詢 就是 查多個 一個集合 查詢 全部 則就是 一個對象的格式 還有

    2024年02月12日
    瀏覽(20)
  • 在前后端分離項(xiàng)目中如何設(shè)置統(tǒng)一返回格式

    在前后端分離項(xiàng)目中如何設(shè)置統(tǒng)一返回格式

    目錄 一、步驟一 二、步驟二 在前后端分離的項(xiàng)目中,為了方便前后端交互,后端往往需要給前端返回固定的數(shù)據(jù)格式,但不同的實(shí)體類返回格式不同,所以在真實(shí)開發(fā)中,我們將所有API接口設(shè)置返回統(tǒng)一的格式?;旧习ǖ挠袪顟B(tài)碼,提示信息和數(shù)據(jù)等等。下面是基本的

    2024年02月22日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包