日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手把手带你实现JAVA自定义异常和全局异常处理

發布時間:2024/3/24 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手把手带你实现JAVA自定义异常和全局异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

廢話不多說,直接開搞

準備工作

1.安裝Lombok插件,JDK1.8

2.本文中使用的統一返回數據類引入的是阿里考拉

<dependency><groupId>com.alibaba.cola</groupId><artifactId>cola-component-domain-starter</artifactId>/version> </dependency>

枚舉類

自定義枚舉類有兩個屬性,errorCode 錯誤碼,errorValue 錯誤原因。在后面自定義異常中會使用到此枚舉類。

import lombok.AllArgsConstructor; import lombok.Getter;/*** 異常枚舉類* @author zhouzhou*/ @Getter @AllArgsConstructor public enum ErrorEnum {/*** 用戶信息相關*/USER_NOT_EXIST_ERROR("20001","未查詢到用戶信息"),USER_NOT_LOGIN_ERROR("20002","用戶登錄信息有誤,請重新登錄"),;private String errorCode;private String errorValue; }

自定義異常基類

自定義異常基類繼承的也是RuntimeException,屬于運行時異常,其中有兩個成員變量,聰明的小伙伴是不是一眼就看出來這兩個變量的含義了。

import lombok.Data; /*** 業務類自定義異常類*/ @Data public class BusinessException extends RuntimeException{private String errorCode;private String errorValue;public BusinessException(String errorCode, String errorValue){super(errorValue);this.errorCode = errorCode;this.errorValue = errorValue;}}

自定義業務異常

繼承BusinessException,主要是用來區分是哪部分業務拋出的異常,也可以將類名改為業務模塊名,比如UserException,這樣在異常信息補獲的時候可以更清晰的知道是哪部分業務拋出的異常。

import com.pailifan.meta.client.base.BusinessException; import com.pailifan.meta.client.enums.ErrorEnum;/*** 自定義異常* @author zhouzhou*/ public class CustomerException extends BusinessException {public CustomerException(ErrorEnum ErrorEnum){super(ErrorEnum.getErrorCode(), ErrorEnum.getErrorValue());} }

------------------重點來了-----------------

全局異常處理器

在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定義@ExceptionHandler、@InitBinder、@ModelAttribute,并應用到所有@RequestMapping中。參考:@ControllerAdvice 文檔

import com.alibaba.cola.dto.Response; import com.alibaba.cola.dto.SingleResponse; import com.alibaba.cola.exception.BizException; import com.pailifan.meta.client.base.BusinessException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestControllerAdvice;/*** @Description* @Author zhouzhou**/ @RestControllerAdvice @Slf4j public class GlobalExceptionHandler {/** * @description: 捕獲異常信息 * @param: [e] * @return: com.alibaba.cola.dto.Response * @author zhouzhou* @date: 2022/11/7 10:54*/@ResponseBody@ExceptionHandler(BusinessException.class)public Response handleBizException(BusinessException e) {log.error("BusinessException,code={},value={}", e.getErrorCode(),e.getErrorValue());return SingleResponse.buildFailure(e.getErrorCode(), e.getErrorValue());}@ResponseBody@ExceptionHandler(Exception.class)public Response handleException(Exception e) {log.error("Exception", e);return SingleResponse.buildFailure(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()), "系統異常");} }

使用

在業務代碼使用中,如果校驗條件不滿足,可以直接使用throw拋出自定義異常信息,不用頻繁的寫try catch和手動拼接返回信息。

if(判斷條件){throw new CustomerException(ErrorEnum.USER_NOT_EXIST_ERROR);}

成果展示

{"success": false,"errCode": "20002","errMessage": "用戶登錄信息有誤,請重新登陸","data": null }

http狀態還是200,前端只需要根據success判斷請求是否成功,如果失敗可以直接彈框提示errMessage信息。成功狀態下從data中獲取數據

全局異常處理和自定義異常的意義

在開發過程中,后端接口返回的數據結構應該是統一且固定的,不應該因為后端發生異常而導致向前端返回的數據結構發生變化,這樣就減少了前段的校驗工作,只需要一套公共代碼就能解析固定的數據結構。

而自定義異常是為了在發生錯誤時,可以從錯誤信息中更好更快的找到有用的提示信息。也可以通過異常信息快速的定位業務模塊。

總結

以上是生活随笔為你收集整理的手把手带你实现JAVA自定义异常和全局异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。