SpringBoot之自定义异常处理

2021-06-24  本文已影响0人  久伴我还是酒伴我

简介

SpringBoot项目进行全局异常的处理是非常有必要的,不仅处理异常方便,而且可以优化代码,是针对我们系统中的异常,给予一定规范的处理结果。

自定义异常类

package com.yutian.machine.cat.base.exception;


import com.yutian.machine.cat.enums.SystemStatusEnums;
import lombok.Data;

@Data
public class YTException extends RuntimeException {

    /**
     * 返回结果代码
     */
    private String resultCode = "200";

    /**
     * 结果描述
     */
    private String resultMsg = "调用成功";

    /**
     * 请求流水号
     */
    private String requestNum;

    public YTException() {
    }

    /**
     * 初始化异常信息
     *
     * @param systemStatusEnums
     *
     * @return
     */
    public YTException(SystemStatusEnums systemStatusEnums) {
        super(systemStatusEnums.getMessage());
        this.resultCode = systemStatusEnums.getCode();
        this.resultMsg = systemStatusEnums.getMessage();
    }


    /**
     * 返回 动态结果 code + msg
     * @param msg  结果
     */
    public YTException(String code, String msg) {
        super(msg);
        this.resultCode = code;
        this.resultMsg = msg;
    }

}

自定义返回类

package com.yutian.machine.cat.base.response;

import com.yutian.machine.cat.enums.SystemStatusEnums;
import lombok.Data;

import java.io.Serializable;

/**
 * @description: 业务信息结果返回对象
 * @author: gaoleijie
 * @create: 2020-01-06 17:47
 **/
@Data
public class YTBizResponse<T> implements Serializable {

    /**
     * 结果代码
     */
    private String code = SystemStatusEnums.BASE_RESPONSE_SUCCESS.getCode();
    /**
     * 结果描述
     */
    private String msg = SystemStatusEnums.BASE_RESPONSE_SUCCESS.getMessage();
    /**
     * 结果体
     */
    private T data;

    public boolean isOk() {
        return SystemStatusEnums.BASE_RESPONSE_SUCCESS.getCode().equals(this.code);
    }


    public static <T> YTBizResponse<T> newInstance(T data) {
        YTBizResponse invoiceBaseResponse = new YTBizResponse();
        invoiceBaseResponse.setData(data);
        return invoiceBaseResponse;
    }


    /**
     * 初始化异常信息
     *
     * @param code
     * @param resultMsg
     * @param <T>
     * @return
     */
    public static <T> YTBizResponse<T> newException(String code, String resultMsg) {
        YTBizResponse<T> invoiceBaseResponse = new YTBizResponse();
        invoiceBaseResponse.setCode(code);
        invoiceBaseResponse.setMsg(resultMsg);
        return invoiceBaseResponse;
    }

    /**
     * 初始化异常信息
     *
     * @param enums
     * @param <T>
     * @return
     */
    public static <T> YTBizResponse<T> newException(SystemStatusEnums enums) {
        YTBizResponse<T> invoiceBaseResponse = new YTBizResponse();
        invoiceBaseResponse.setCode(enums.getCode());
        invoiceBaseResponse.setMsg(enums.getMessage());
        return invoiceBaseResponse;
    }
}

异常统一处理类

package com.yutian.machine.cat.base.exception;

import com.yutian.machine.cat.base.response.YTBizResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author leijie.gao
 * @version 1.0.0
 * @ClassName GlobalExceptionHandler.java
 * @Description TODO
 * @createTime 2021年06月24日 17:27:00
 */
@ControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 自定义异常
     * @param e
     * @return
     */
    @ExceptionHandler(value = YTException.class)
    @ResponseBody
    public YTBizResponse exceptionHandler(YTException e){
        return YTBizResponse.newException(e.getResultCode(),e.getResultMsg());
    }
}

结束语

异常统一处理,或许我们看起来实现非常简单,然而,其他它包含的思想却是一种大局思想,这是我们开发人员在开发过程中都应该关注的点,我们并不是只需要关注我们每个人开发的那点任务,而要以一种全局的角度去审视整个项目,这样也能够提升我们开问题的高度。

上一篇下一篇

猜你喜欢

热点阅读