最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中@RestControllerAdvice 全局異常處理的實現(xiàn)

 更新時間:2025年06月18日 10:37:50   作者:Muscleheng  
本文主要介紹了SpringBoot中@RestControllerAdvice 全局異常處理的實現(xiàn),通過定義統(tǒng)一響應(yīng)格式、自定義異常類及測試驗證,確保接口異常時返回指定格式的提示信息,提升錯誤處理一致性

利用注解@RestControllerAdvice 輕輕松松實現(xiàn)全局異常處理

一、定義統(tǒng)一響應(yīng)體

package com.zhh.demo.common.response;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * @Description: 接口出參統(tǒng)一響應(yīng)實體
 * @Author: zhaoheng
 * @CreateTime: 2022-08-05  16:27
 */
@Data
@ApiModel("接口出參統(tǒng)一響應(yīng)實體")
public class Response<T> implements Serializable {
    private static final long serialVersionUID = 3692286106860121474L;

    @ApiModelProperty(value = "狀態(tài)碼")
    private String code;

    @ApiModelProperty(value = "說明")
    private String message;

    private T data;

    public Response(){}

    public Response(String code, String message) {
        this.code = code;
        this.message = message;
    }

    public Response(String code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }
}
package com.zhh.demo.common.response;

import lombok.Getter;

/**
 * @Description: 統(tǒng)一響應(yīng)code和說明
 * @Author: zhaoheng
 * @CreateTime: 2022-08-05  16:42
 */
public enum ResponseCode {

    /** 通用碼 **/
    FAIL("-1", "系統(tǒng)錯誤"),
    OK("200", "成功"),

    /**
     * 參考阿里巴巴開發(fā)手冊
     * 錯誤碼為字符串類型,共5位,分兩部分組成:錯誤標(biāo)識+4位數(shù)字編號。
     * 例:A0001,A1001,B0001,C0001... A、B、分別代表不通業(yè)務(wù)或者來源
     **/

    /** 參數(shù)校驗不通過 **/
    PARAMETER_CHECK_FAILS("A0001","參數(shù)校驗不通過"),

    /** 用戶相關(guān) A1xxx **/
    USER_NAME_NONSTANDARD("A1002", "用戶名不合規(guī)");

    ResponseCode(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Getter
    private String code;

    @Getter
    private String msg;
}
package com.zhh.demo.common.response;

import com.zhh.demo.entity.common.ResponsePage;

import java.util.List;

/**
 * @Description: 接口統(tǒng)一響應(yīng)實體構(gòu)造類
 * @Author: zhaoheng
 * @CreateTime: 2022-08-05  16:37
 */
public class ResponseFactory {

    /**
     * 默認(rèn)成功
     * @param t
     * @param <T>
     * @return
     */
    public static <T> Response<T> success(T t){
       return new Response<T>(ResponseCode.OK.getCode(),ResponseCode.OK.getMsg(),t);
    }

    /**
     * 成功
     * @param responseCode  響應(yīng)code和說明
     * @param t
     * @param <T>
     * @return
     */
    public static <T> Response<T> success(ResponseCode responseCode, T t){
        return new Response<T>(responseCode.getCode(),responseCode.getMsg(),t);
    }

    /**
     * 成功
     * @param responseCode  響應(yīng)code和說明
     * @return
     */
    public static <T> Response<T> success(ResponseCode responseCode){
        return new Response<T>(responseCode.getCode(),responseCode.getMsg());
    }

    /**
     * 默認(rèn)失敗
     * @param <T>
     * @return
     */
    public static <T> Response<T> error(){
        return new Response<T>(ResponseCode.FAIL.getCode(),ResponseCode.FAIL.getMsg());
    }

    /**
     * 失敗
     * @param responseCode  響應(yīng)code和說明
     * @param t
     * @param <T>
     * @return
     */
    public static <T> Response<T> error(ResponseCode responseCode, T t){
        return new Response<T>(responseCode.getCode(),responseCode.getMsg(),t);
    }

    /**
     * 失敗
     * @param responseCode  響應(yīng)code和說明
     * @return
     */
    public static <T> Response<T> error(ResponseCode responseCode){
        return new Response<T>(responseCode.getCode(),responseCode.getMsg());
    }

    /**
     * 失敗
     * @param code  錯誤碼
     * @param msg   說明
     * @param t     響應(yīng)數(shù)據(jù)
     * @param <T>
     * @return
     */
    public static <T> Response<T> error(String code, String msg, T t){
        return new Response<T>(code,msg,t);
    }

    /**
     * 失敗
     * @param code  錯誤碼
     * @param msg   說明
     * @return
     */
    public static <T> Response<T> error(String code, String msg){
        return new Response<T>(code,msg);
    }

    public static <T> ResponsePage pageResult(List<T> list, int total){
        return new ResponsePage<T>(list,total);
    }

}

二、定義全局異常處理類

package com.zhh.demo.common.exception;

import com.zhh.demo.common.response.Response;
import com.zhh.demo.common.response.ResponseCode;
import com.zhh.demo.common.response.ResponseFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.List;

/**
 * @Description: 全局異常處理
 * @Author: zhaoheng
 * @CreateTime: 2022-08-05  17:33
 */
@Slf4j
@RestControllerAdvice
public class ExceptionHandle {

    /**
     * 處理Exception異常
     * @param exception 異常類型
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    public Response<?> ExceptionHandle(Exception exception){
        log.error("系統(tǒng)出現(xiàn)異常:",exception);
        return ResponseFactory.error(ResponseCode.FAIL);
    }

    /**
     * 處理業(yè)務(wù)異常
     * @param exception 異常類型
     * @return
     */
    @ExceptionHandler(value = BaseException.class)
    public Response<?> BaseExceptionHandle(BaseExceptionexception){
        log.error("系統(tǒng)業(yè)務(wù)異常:",exception);
        return ResponseFactory.error(exception.getCode(),exception.getMsg());
    }

    /**
     * 入?yún)⑿r灝惓?,校驗不通過,拋出異常信息
     * @param exception Valid 入?yún)⑿r灝惓?
     * @return
     */
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public Response<?> methodArgumentNotValidExceptionHandle(MethodArgumentNotValidException exception){
        log.error("入?yún)⑿r灢煌ㄟ^",exception);
        BindingResult bindingResult = exception.getBindingResult();
        List<FieldError> fieldErrorList = bindingResult.getFieldErrors();
        fieldErrorList.forEach(fieldError -> {
            log.info("字段:{},message:{}",fieldError.getField(),fieldError.getDefaultMessage());
        });
        // 一個一個給調(diào)用方返回提示
        String message = fieldErrorList.get(0).getDefaultMessage();
        return ResponseFactory.error(ResponseCode.PARAMETER_CHECK_FAILS.getCode(), message);
    }

}

自定義異常

package com.zhh.demo.common.exception;

import com.zhh.demo.common.response.Response;
import com.zhh.demo.common.response.ResponseCode;
import lombok.Data;

/**
 * @Description: 異?;?
 * @Author: zhaoheng
 * @CreateTime: 2022-08-05  17:22
 */
@Data
public abstract class BaseException extends RuntimeException{

    /**
     * code碼
     */
    private String code;

    /**
     * 異常說明
     */
    private String msg;

    /**
     * 響應(yīng)體
     */
    private Response response;

    public BaseException(String code, String msg) {
        super(msg);
        this.code = code;
        this.msg = msg;
        this.response = new Response(code,msg);
    }

    public BaseException(ResponseCode responseCode) {
        super(responseCode.getMsg());
        this.code = responseCode.getCode();
        this.msg = responseCode.getMsg();
        this.response = new Response(responseCode.getCode(),responseCode.getMsg());
    }
}

三、編寫接口測試效果

package com.zhh.demo.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;


@Api(tags = "test-api")
@RequestMapping("/api/test")
@RestController
@Validated // 開啟入?yún)⑿r?
public class TestController {
    
    @ApiOperation("異常測試")
    @PostMapping("/t1")
    public String test(){
        // 模擬異常
        new ArrayList<>().get(1);
        return "";
    }
}

經(jīng)過測試,接口拋出異常后會被異常處理類處理,并且給調(diào)用端返回指定格式的提示信息

{
  "code": "-1",
  "message": "系統(tǒng)錯誤",
  "data": null
}

到此這篇關(guān)于SpringBoot中@RestControllerAdvice 全局異常處理的實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot @RestControllerAdvice 全局異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java身份證號碼校驗工具類詳解

    Java身份證號碼校驗工具類詳解

    這篇文章主要為大家詳細(xì)介紹了Java身份證號碼校驗工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • JAVA springboot如何開啟倆端口

    JAVA springboot如何開啟倆端口

    這篇文章主要介紹了JAVA springboot如何開啟倆端口問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 兩天沒解決的問題chatgpt用了5秒搞定隱藏bug

    兩天沒解決的問題chatgpt用了5秒搞定隱藏bug

    這篇文章主要為大家描述了我用了兩天沒解決的問題chatgpt用了5秒搞定的全程介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • java獲取項目路徑的幾種實現(xiàn)方式

    java獲取項目路徑的幾種實現(xiàn)方式

    本文介紹了在前端和后端獲取當(dāng)前項目路徑的常用方法,包括獲取工程根路徑、計算機域名和IP,以及獲取Tomcat下的真實路徑,并建議將路徑設(shè)置為全局變量以便管理,適用于文件上傳等場景
    2025-10-10
  • 如何解決Webservice第一次訪問特別慢的問題

    如何解決Webservice第一次訪問特別慢的問題

    這篇文章主要介紹了如何解決Webservice第一次訪問特別慢的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • MyBatis快速入門

    MyBatis快速入門

    MyBatis是支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。想要學(xué)好它,那就要從MyBatis基礎(chǔ)知識學(xué)起,下面跟著小編一起來看下吧
    2017-03-03
  • SpringBoot集成Apache POI實現(xiàn)Excel的導(dǎo)入導(dǎo)出

    SpringBoot集成Apache POI實現(xiàn)Excel的導(dǎo)入導(dǎo)出

    Apache POI是一個流行的Java庫,用于處理Microsoft Office格式文件,包括Excel文件,本文主要介紹了SpringBoot集成Apache POI實現(xiàn)Excel的導(dǎo)入導(dǎo)出,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • MyBatis-Plus自動化填充的踩坑記錄及解決

    MyBatis-Plus自動化填充的踩坑記錄及解決

    這篇文章主要介紹了MyBatis-Plus自動化填充的踩坑記錄及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • RabbitMQ修改默認(rèn)密碼的操作步驟

    RabbitMQ修改默認(rèn)密碼的操作步驟

    這篇文章主要給大家介紹了關(guān)于RabbitMQ修改默認(rèn)密碼的操作步驟,在RabbitMQ中默認(rèn)用戶guest的密碼是guest,出于安全考慮,最好不要在生產(chǎn)環(huán)境中使用默認(rèn)用戶和密碼,需要的朋友可以參考下
    2024-11-11
  • Mybatis #foreach中相同的變量名導(dǎo)致值覆蓋的問題解決

    Mybatis #foreach中相同的變量名導(dǎo)致值覆蓋的問題解決

    本文主要介紹了Mybatis #foreach中相同的變量名導(dǎo)致值覆蓋的問題解決,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

奇台县| 河曲县| 文山县| 辽中县| 桃源县| 巴中市| 航空| 漳浦县| 白河县| 池州市| 华坪县| 丰原市| 乐东| 灌云县| 益阳市| 巩义市| 积石山| 墨江| 东辽县| 安新县| 偃师市| 无棣县| 屯门区| 张家川| 甘孜| 天柱县| 常山县| 临江市| 宣武区| 泸定县| 乾安县| 大庆市| 和田县| 福建省| 香格里拉县| 宁陕县| 平阳县| 镇远县| 塔城市| 法库县| 嵊州市|