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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

springboot下添加全局异常处理和自定义异常处理

發(fā)布時(shí)間:2023/12/24 windows 25 coder
生活随笔 收集整理的這篇文章主要介紹了 springboot下添加全局异常处理和自定义异常处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

在spring項(xiàng)目中,優(yōu)雅處理異常,好處是可以將系統(tǒng)產(chǎn)生的全部異常統(tǒng)一捕獲處理,自定義的異常也由全局異常來(lái)捕獲,如果涉及到validator參數(shù)校驗(yàn)器使用全局異常捕獲也是較為方便。

相關(guān)代碼:

GlobalExceptionHandler類:

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

    /********************************
     *  @function  : 自定義從捕捉
     *  @parameter : [e:CustomException | 自定義異常]
     *  @date      : 2023/12/5 11:47
     ********************************/
    @ExceptionHandler(value = CustomException.class)
    public AjaxResult customExceptionHandler(HttpServletRequest request, CustomException e) {
        log.error("業(yè)務(wù)異常,url:{}, 異常內(nèi)容:{}" ,request.getRequestURI(), e);
        return new AjaxResult(e.getCode() , e.getMessage(), null);
    }

    /********************************
     *  @function  : 空指針異常捕捉
     *  @parameter : [e:Exception | 異常]
     *  @date      : 2023/12/5 11:47
     ********************************/
    @ExceptionHandler(value = Exception.class)
    public AjaxResult exceptionHandler(HttpServletRequest request, Exception e) {
        log.error("服務(wù)器內(nèi)部異常異常,url:{}, 異常內(nèi)容:{}" ,request.getRequestURI(), e);
        return new AjaxResult(500 , e.getMessage(), null);
    }

}

自定義異常CustomException類:

@Slf4j
@Data
public class CustomException extends RuntimeException{

    //錯(cuò)誤碼
    private int code;

    //錯(cuò)誤信息
    private String message;


    public CustomException() {
        super();
    }

    public CustomException(ResultCodeEnum resultCodeEnum) {
        super(String.valueOf(resultCodeEnum.getCode()));
        this.code = resultCodeEnum.getCode();
        this.message = resultCodeEnum.getMessage();
    }

}

通用返回類:AjaxResult

@Data
public class AjaxResult extends HashMap<String, Object> {

    // 狀態(tài)碼
    private static final String CODE_TAG = "code";

    // 返回消息
    private static final String MSG_TAG = "message";

    // 數(shù)據(jù)對(duì)象
    private static final String DATA_TAG = "data";

    public AjaxResult(int code, String message, Object data)
    {
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, message);
        if (data != null)
        {
            super.put(DATA_TAG, data);
        }
    }

    /********************************
     *  @method    : success
     *  @function  : 返回成功消息(重載)
     *  @parameter :
     *  @return    : AjaxResult
     ********************************/
    public static AjaxResult success(){
        return new AjaxResult(ResultCodeEnum.SUCCESS.getCode(), ResultCodeEnum.SUCCESS.getMessage(), null);
    }

    /********************************
     *  @method    : success
     *  @function  : 返回成功消息(重載)
     *  @parameter : message : String | 返回消息
     *  @return    : AjaxResult
     ********************************/
    public static AjaxResult success(String message){
        return new AjaxResult(ResultCodeEnum.SUCCESS.getCode(), message, null);
    }

    /********************************
     *  @method    : success
     *  @function  : 返回成功消息(重載)
     *  @parameter : data : Object | 數(shù)據(jù)對(duì)象
     *  @return    : AjaxResult
     ********************************/
    public static AjaxResult success(Object data){
        return new AjaxResult(ResultCodeEnum.SUCCESS.getCode(), ResultCodeEnum.SUCCESS.getMessage(), data);
    }

    /********************************
     *  @method    : success
     *  @function  : 返回成功消息(重載)
     *  @parameter : message : String | 返回消息
     *  @parameter : data : Object | 數(shù)據(jù)對(duì)象
     *  @return    : AjaxResult
     ********************************/
    public static AjaxResult success(String message, Object data){
        return new AjaxResult(ResultCodeEnum.SUCCESS.getCode(), message, data);
    }

    /********************************
     *  @method    : failed
     *  @function  : 返回失敗消息(重載)
     *  @parameter :
     *  @return    : AjaxResult
     ********************************/
    public static AjaxResult failed(){
        return new AjaxResult(ResultCodeEnum.FAILED.getCode(), ResultCodeEnum.FAILED.getMessage(), null);
    }

    /********************************
     *  @method    : failed
     *  @function  : 返回失敗消息(重載)
     *  @parameter : message : String | 返回消息
     *  @return    : AjaxResult
     ********************************/
    public static AjaxResult failed(String message){
        return new AjaxResult(ResultCodeEnum.FAILED.getCode(), message, null);
    }

    /********************************
     *  @method    : failed
     *  @function  : 返回失敗消息(重載)
     *  @parameter : resultCodeEnum : ResultCodeEnum | 失敗枚舉類型
     *  @return    : AjaxResult
     ********************************/
    public static AjaxResult failed(ResultCodeEnum resultCodeEnum){
        return new AjaxResult(resultCodeEnum.getCode(), resultCodeEnum.getMessage(), null);
    }

    /********************************
     *  @method    : failed
     *  @function  : 返回失敗消息(重載)
     *  @parameter : message : String | 返回消息
     *  @parameter : data : Object | 數(shù)據(jù)對(duì)象
     *  @return    : AjaxResult
     ********************************/
    public static AjaxResult failed(String message, Object data){
        return new AjaxResult(ResultCodeEnum.FAILED.getCode(), message, data);
    }

    /********************************
     *  @method    : failed
     *  @function  : 返回失敗消息(重載)
     *  @parameter : resultCodeEnum : ResultCodeEnum | 失敗枚舉類型
     *  @parameter : data : Object | 數(shù)據(jù)對(duì)象
     *  @return    : AjaxResult
     ********************************/
    public static AjaxResult failed(ResultCodeEnum resultCodeEnum, Object data){
        return new AjaxResult(resultCodeEnum.getCode(), resultCodeEnum.getMessage(), data);
    }
}

枚舉類ResultCodeEnum:

public enum ResultCodeEnum {

    // 10??? 通用
    SUCCESS(10000,"請(qǐng)求成功"),
    FAILED(10008, "請(qǐng)求失敗"),
    FAILED_PARAM_ERROR(10009, "參數(shù)錯(cuò)誤"),
...
    private Integer code;

    private String message;

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

    public int getCode(){
        return code;
    }

    public String getMessage(){
        return message;
    }

}

使用:

在controller里面判斷值是否異常,如果異常則直接拋出異常不進(jìn)行執(zhí)行,終止當(dāng)前的流程,在service層也可以這樣處理。


    public AjaxResult getUserInfo(@RequestParam(value = "userId") Integer userId) {
        if (userId == 0) {
            throw new CustomException(ResultCodeEnum.NOT_EXIST_USER_ERROR);
        }
        ...
    }
        

再者是一些數(shù)值上的錯(cuò)誤,比如除0,這種情況會(huì)被全局異常捕獲,并返回相應(yīng)的錯(cuò)誤給到前端


    @GetMapping("/test")
    public AjaxResult test(){
        int i = 60/0;
        return AjaxResult.success();
    }

總結(jié)

以上是生活随笔為你收集整理的springboot下添加全局异常处理和自定义异常处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。