系统自定义异常实现解决方案

1. 系统异常类

public class AiException extends RuntimeException {

    @Getter
    private String errorCode;
    @Getter
    private String errorDesc;

    public AiException (String errorCode, String errorDesc) {
        super(errorCode);
        this.errorCode = errorCode;
        this.errorDesc = errorDesc;
    }

    public AiException (ExceptionEnum ex, Object... args) {
        super(ex.getErrorCode());
        this.errorCode = ex.getErrorCode();
        this.errorDesc = String.format(ex.getErrorDesc(), args);
    }

}

2. 异常码

public enum ExceptionEnum {

    /* 数据库操作类异常 */
    /** 写入时异常 */
    DB_INSERT_EXCEPTION("DB1001", "table[%s] reasons[%s]"),

    /** 更新时异常 */
    DB_UPDATE_EXCEPTION("DB2001", "table[%s] reasons[%s]"),

    /** 删除时异常 */
    DB_DELETE_EXCEPTION("DB3001", "table[%s] reasons[%s]"),

    /** 查询时异常 */
    DB_SELECT_EXCEPTION("DB4001", "table[%s] reasons[%s]"),


	/* 业务类异常 */
    ;


    /**
     * 错误码
     * */
    @Getter
    private String errorCode;

    /**
     * 错误描述
     * */
    @Getter
    private String errorDesc;


    ExceptionEnum(String errorCode, String errorDesc) {
        this.errorCode = errorCode;
        this.errorDesc = errorDesc;
    }

}

3. 统一异常处理

@ControllerAdvice
@Slf4j
public class ExceptionHandler {

    @ExceptionHandler(AiException.class)
    @ResponseBody
    public AiResponse exceptionHandler(AiException ex) {
        log.error("errorCode[{}] errorDesc[{}]", ex.getErrorCode(), ex.getErrorDesc());

        return AiResponse.failed(ex.getErrorDesc());
    }



    @ExceptionHandler(Exception.class)
    @ResponseBody
    public AiResponse exceptionHandler(Exception ex) {
        log.error("exception message[{}]", ex.getMessage());

        return AiResponse.failed(ex.getMessage());
    }

}

4. 响应体

@Data
public class AiResponse<T> {
    /**
     * 响应码
     * */
    private String code;

    /**
     * 详细描述
     * */
    private String desc;

    /**
     * 响应数据
     * */
    private T data;

    private AiResponse(ResponseEnum responseEnum, T data) {
        this.code = responseEnum.code();
        this.desc = responseEnum.desc();
        this.data = data;
    }

    public static <T> AiResponse success(T data) {
        return new AiResponse<>(ResponseEnum.SUCCESS, data);
    }

    public static <T> AiResponse failed(T data) {
        return new AiResponse<>(ResponseEnum.FAILED, data);
    }

    public static <T> AiResponse failed(ResponseEnum responseEnum, T data) {
        return new AiResponse<>(responseEnum, data);
    }

}

5. 响应码

public enum ResponseEnum {
    /** success */
    SUCCESS("0000", "success"),

    /** failed */
    FAILED("0001", "failed")
    ;

    ResponseEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    private String code;

    private String desc;

    public String code() {
        return code;
    }

    public String desc() {
        return desc;
    }
}

猜你喜欢

转载自blog.csdn.net/u010979642/article/details/91861909
今日推荐