欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java封裝全局異常處理深入詳解

 更新時(shí)間:2023年09月24日 11:31:40   作者:Leovany  
這篇文章主要為大家介紹了java封裝全局異常處理的深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1 定義錯(cuò)誤碼類

? 可以定義各種錯(cuò)誤碼枚舉,比如業(yè)務(wù),系統(tǒng)相關(guān)的報(bào)錯(cuò)信息

/**
 * 錯(cuò)誤代碼
 * 錯(cuò)誤碼
 *
 * @author leovany
 * @date 2023/09/23
 */
public enum ErrorCode {
    SUCCESS(0, "success", ""),
    ERROR_PARAMS(40000, "請(qǐng)求參數(shù)錯(cuò)誤", ""),
    ERROR_NULL(40001, "請(qǐng)求數(shù)據(jù)為空", ""),
    ERROR_LOGIN(40100, "未登錄", ""),
    ERROR_NO_AUTH(41001, "無(wú)權(quán)限", ""),
    ERROR_SYSTEM(50000, "系統(tǒng)內(nèi)部異常", "")
    ;
    /**
     * 錯(cuò)誤碼ID
     */
    private final int code;
    /**
     * 錯(cuò)誤碼信息
     */
    private final String message;
    /**
     * 錯(cuò)誤碼描述(詳情)
     */
    private final String description;
    ErrorCode(int code, String message, String description) {
        this.code = code;
        this.message = message;
        this.description = description;
    }
    public int getCode() {
        return code;
    }
    public String getMessage() {
        return message;
    }
    public String getDescription() {
        return description;
    }
}

2 定義業(yè)務(wù)異常類

  • 相對(duì)于 java 的異常類,支持更多字段

    擴(kuò)展了 codedescription兩個(gè)字段

  • 自定義構(gòu)造函數(shù),更靈活 / 快捷的設(shè)置字段
import com.leovany.usercenter.common.ErrorCode;
/**
 * 業(yè)務(wù)異常
 * 自定義業(yè)務(wù)異常類
 *
 * @author leovany
 * @date 2023/09/23
 */
public class BusinessException extends RuntimeException {
    /**
     * 錯(cuò)誤碼
     */
    private final int code;
    /**
     * 描述
     */
    private final String description;
    /**
     * 業(yè)務(wù)異常
     *
     * @param message     信息
     * @param code        錯(cuò)誤碼
     * @param description 描述
     */
    public BusinessException(String message, int code, String description) {
        super(message);
        this.code = code;
        this.description = description;
    }
    /**
     * 業(yè)務(wù)異常
     *
     * @param errorCode 錯(cuò)誤代碼
     */
    public BusinessException(ErrorCode errorCode) {
        super(errorCode.getMessage());
        this.code = errorCode.getCode();
        this.description = errorCode.getDescription();
    }
    /**
     * 業(yè)務(wù)異常
     *
     * @param errorCode   錯(cuò)誤代碼
     * @param description 描述
     */
    public BusinessException(ErrorCode errorCode, String description) {
        super(errorCode.getMessage());
        this.code = errorCode.getCode();
        this.description = description;
    }
    public int getCode() {
        return code;
    }
    public String getDescription() {
        return description;
    }
}

3 全局異常處理器

通過(guò)Spring AOP實(shí)現(xiàn),在調(diào)用方法前后進(jìn)行額外的處理

作用

  • 捕獲代碼中所有的異常,讓前端得到更詳細(xì)的業(yè)務(wù)報(bào)錯(cuò)信息
  • 屏蔽掉項(xiàng)目框架本身的異常,不暴露服務(wù)器的內(nèi)部狀態(tài)
  • 集中處理,比如還可以做記錄日志
import com.leovany.usercenter.common.ResultVO;
import com.leovany.usercenter.common.ErrorCode;
import com.leovany.usercenter.common.ResultUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
 * 全局異常處理類
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    /**
     * 處理異常-BusinessException
     * @param e
     * @return
     */
    @ExceptionHandler(BusinessException.class)
    public ResultVO<?> businessExceptionHandler(BusinessException e){
        log.error("businessException:" + e.getMessage(),e);
        return ResultUtils.error(e.getCode(),e.getMessage(),e.getDescription());
    }
    /**
     * 處理異常-RuntimeException
     * @param e
     * @return
     */
    @ExceptionHandler(RuntimeException.class)
    public ResultVO<?> runtimeExceptionHandler(RuntimeException e){
        log.error("runtimeException:" + e);
        return ResultUtils.error(ErrorCode.ERROR_SYSTEM,e.getMessage());
    }
}

4 使用

throw new BusinessException可以在方法中,任意地方拋出,很方便

  • 示例代碼
@PostMapping("/login")
public ResultVO<User> userLogin(@RequestBody UserLoginRequest userLoginRequest, HttpServletRequest request) {
    String userAccount = userLoginRequest.getUserAccount();
    String userPassword = userLoginRequest.getUserPassword();
    if (StringUtils.isAnyBlank(userAccount, userPassword)) {
        throw new BusinessException(ErrorCode.ERROR_PARAMS);
    }
    User user = userService.doLogin(userAccount, userPassword, request);
    return ResultUtils.success(user);
}
  • 代碼對(duì)比

5 前端請(qǐng)求效果

總結(jié)

通過(guò)封裝全局異常處理,對(duì)異常信息做了統(tǒng)一處理,讓前端得到更詳細(xì)的業(yè)務(wù)信息,同時(shí)保證系統(tǒng)的安全性(不會(huì)暴露系統(tǒng)內(nèi)部信息),在代碼上對(duì)參數(shù)校驗(yàn)等方面提供更加方便的形式。

以上就是java封裝全局異常處理深入詳解的詳細(xì)內(nèi)容,更多關(guān)于java封裝全局異常處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java應(yīng)用服務(wù)器之tomcat會(huì)話復(fù)制集群配置的示例詳解

    Java應(yīng)用服務(wù)器之tomcat會(huì)話復(fù)制集群配置的示例詳解

    這篇文章主要介紹了Java應(yīng)用服務(wù)器之tomcat會(huì)話復(fù)制集群配置的相關(guān)知識(shí),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java使用Zxing二維碼生成的簡(jiǎn)單示例

    Java使用Zxing二維碼生成的簡(jiǎn)單示例

    ZXing是一個(gè)開(kāi)源的,用Java實(shí)現(xiàn)的多種格式的1D/2D條碼圖像處理庫(kù),下面這篇文章主要給大家介紹了關(guān)于Java使用Zxing二維碼生成的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Scala隱式轉(zhuǎn)換和隱式參數(shù)詳解

    Scala隱式轉(zhuǎn)換和隱式參數(shù)詳解

    Scala隱式轉(zhuǎn)換和隱式參數(shù)是兩個(gè)非常強(qiáng)大的功能,它們可以讓我們編寫(xiě)更靈活和優(yōu)雅的代碼,但也需要注意一些潛在的問(wèn)題和風(fēng)險(xiǎn),這篇文章主要介紹了Scala隱式轉(zhuǎn)換和隱式參數(shù),需要的朋友可以參考下
    2023-04-04
  • Java代碼性能測(cè)試實(shí)戰(zhàn)之ContiPerf安裝使用

    Java代碼性能測(cè)試實(shí)戰(zhàn)之ContiPerf安裝使用

    這篇文章主要為大家介紹了Java代碼性能測(cè)試實(shí)戰(zhàn)之ContiPerf安裝使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Spring MVC數(shù)據(jù)綁定概述及原理詳解

    Spring MVC數(shù)據(jù)綁定概述及原理詳解

    這篇文章主要介紹了Spring MVC數(shù)據(jù)綁定概述及原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java程序員必須知道的5個(gè)JVM命令行標(biāo)志

    Java程序員必須知道的5個(gè)JVM命令行標(biāo)志

    這篇文章主要介紹了每個(gè)Java程序員必須知道的5個(gè)JVM命令行標(biāo)志,需要的朋友可以參考下
    2015-03-03
  • 淺談web服務(wù)器項(xiàng)目中靜態(tài)請(qǐng)求和動(dòng)態(tài)請(qǐng)求處理

    淺談web服務(wù)器項(xiàng)目中靜態(tài)請(qǐng)求和動(dòng)態(tài)請(qǐng)求處理

    這篇文章主要介紹了淺談web服務(wù)器項(xiàng)目中靜態(tài)請(qǐng)求和動(dòng)態(tài)請(qǐng)求處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java中HashSet和LinkedHashSet詳解

    Java中HashSet和LinkedHashSet詳解

    這篇文章主要介紹了Java中HashSet和LinkedHashSet詳解,   HashSet是Set接口的子類,其內(nèi)部采用了HashMap作為數(shù)據(jù)存儲(chǔ),HashSet其實(shí)就是在操作HashMap的key,HashSet是無(wú)序存儲(chǔ)的,不能保證元素的順序;HashSet并沒(méi)有進(jìn)行同步處理,因此是線程不安全的,需要的朋友可以參考下
    2023-09-09
  • Java設(shè)計(jì)模式之里氏替換原則精解

    Java設(shè)計(jì)模式之里氏替換原則精解

    設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_(kāi)發(fā)人員所采用。設(shè)計(jì)模式是軟件開(kāi)發(fā)人員在軟件開(kāi)發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案。本篇介紹設(shè)計(jì)模式七大原則之一的里氏替換原則
    2022-02-02
  • spring cloud gateway集成hystrix實(shí)戰(zhàn)篇

    spring cloud gateway集成hystrix實(shí)戰(zhàn)篇

    這篇文章主要介紹了spring cloud gateway集成hystrix實(shí)戰(zhàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論