【全局异常】返回值通过【枚举】的形式返回

目录

  • 需求
  • 创建抽象类
  • 创建业务枚举
  • 使用
  • 枚举升级
    • 简单的方式实现:
    • 使用注解方式实现:

需求

       后台程序发生异常,通过全局的异常类使用枚举的方式把错误信息返回给前端。

全局异常类处理方式:

【全局异常】返回值通过【枚举】的形式返回_第1张图片

改造前使用

在这里插入图片描述

改造后使用枚举传递:

在这里插入图片描述

创建抽象类

AbstractBaseExceptionEnum抽象类里面,创建2个抽象方法。

  • getCode() : 用于返回错误码
  • getMessage() :用于返回错误信息
public interface AbstractBaseExceptionEnum {
    /**
     * 错误码
     */
     Integer getCode();

    /**
     * 错误提示
     */
     String getMessage();
}

创建业务枚举

       TaokeException 用于返回指定业务错误信息的枚举,我们需要实现AbstractBaseExceptionEnum 抽象接口,因为是抽象方法所以必须要重写里面的2个方法。
【全局异常】返回值通过【枚举】的形式返回_第2张图片
    在全局异常类ServiceException中创建构造方法,参数值就是我们的抽象类AbstractBaseExceptionEnum

【全局异常】返回值通过【枚举】的形式返回_第3张图片

public ServiceException(AbstractBaseExceptionEnum exceptionEnum)
{
    this.message = exceptionEnum.getMessage();
    this.code = exceptionEnum.getCode();
}

使用

    这样我们在传递错误信息的时候我们就可以通过枚举的形式传递错误,以后我们只需要维护好错误枚举类就好了.

在这里插入图片描述

返回给前端:

在这里插入图片描述

枚举升级

      由于我们的枚举,是跟着业务走的这样就会出现多个异常枚举类,里面的错误码,总不能按照这其他业务里面的错误码进行延伸吧.

【全局异常】返回值通过【枚举】的形式返回_第4张图片
【全局异常】返回值通过【枚举】的形式返回_第5张图片
      如果是多人开发时,我们在本地没提交到master上,我们是不知道其他人有已经把错误码编写到几了.
      所以正确的方式是每个错误枚举里面的错误码,只要关乎本错误枚举.格式可以是: model+code 每个错误枚举里面的model都是唯一的.

简单的方式实现:

简单的方式实现:

【全局异常】返回值通过【枚举】的形式返回_第6张图片

返回给前端:

在这里插入图片描述

使用注解方式实现:

创建ExpEnumType注解,用于添加在异常枚举类上.

@Documented
@Target({ElementType.TYPE})//类、接口(包括注释类型)或枚举声明
@Retention(RetentionPolicy.RUNTIME)//注释将由编译器记录在类文件中,并在运行时由VM保留,因此它们可能被反射地读取
public @interface ExpEnumType {
    int model() default 99999;
}

【全局异常】返回值通过【枚举】的形式返回_第7张图片
然后我们可以通过类的getAnnotation方法,传递参数ExpEnumType.class.可以得到该类上的ExpEnumType的信息.
【全局异常】返回值通过【枚举】的形式返回_第8张图片
修改getCode()方法如下:

//该类上必须要有注解ExpEnumType否则会抛空指针异常
ExpEnumType annotation = this.getClass().getAnnotation(ExpEnumType.class);
return Integer.valueOf(annotation.model()+""+this.code);

【全局异常】返回值通过【枚举】的形式返回_第9张图片

【全局异常】返回值通过【枚举】的形式返回_第10张图片

返回给前端: 效果是一样的

【全局异常】返回值通过【枚举】的形式返回_第11张图片

你可能感兴趣的:(java进阶,java,开发语言,枚举)