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

news2024/11/26 4:47:39

📚目录

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

需求

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

全局异常类处理方式:

在这里插入图片描述

改造前使用

在这里插入图片描述

改造后使用枚举传递:

在这里插入图片描述

创建抽象类

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

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

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

创建业务枚举

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

在这里插入图片描述

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

使用

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

在这里插入图片描述

返回给前端:

在这里插入图片描述

枚举升级

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

在这里插入图片描述
在这里插入图片描述
      如果是多人开发时,我们在本地没提交到master上,我们是不知道其他人有已经把错误码编写到几了.
      所以正确的方式是每个错误枚举里面的错误码,只要关乎本错误枚举.格式可以是: model+code 每个错误枚举里面的model都是唯一的.

简单的方式实现:

简单的方式实现:

在这里插入图片描述

返回给前端:

在这里插入图片描述

使用注解方式实现:

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

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

在这里插入图片描述
然后我们可以通过类的getAnnotation方法,传递参数ExpEnumType.class.可以得到该类上的ExpEnumType的信息.
在这里插入图片描述
修改getCode()方法如下:

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/760303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高楼电脑端+黑金手机端个人引导页HTML源码

https://wwwf.lanzout.com/ipAfg12n5y4f 二、黑金主题网址导航 https://wwwf.lanzout.com/ieSVB12n5y2d

C语言文件操作【超详解】

目录 1.为什么使用文件 2.什么是文件 2.1程序文件 2.2数据文件 2.3文件名 3.文件的打开和关闭 3.1文件指针 3.2文件的打开和关闭 3.2.1fopen函数 3.2.2fclose函数 4.文件的顺序读写 4.1顺序读写函数介绍 4.1.1 fputc、fgetc和fputs、fgets 4.1.2fprintf、fscanf&…

装饰(Decorator)模式

目录 动机使用场景参与者协作效果实现相关模式应用和思考类图 装饰模式是对象结构型模式,动态地给一个对象添加一些额外的职责。就增加的功能来说装饰器模式相比生成子类更为灵活。 动机 有时候需要给某个对象而不是整个类添加一些功能,使用继承也可以&…

【SDOF振荡器的非线性-非弹性多轴时间响应分析】用于SDOF振荡器非线性非弹性时程分析的鲁棒性分析研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

经典指针笔试题你会了嘛

作者简介:დ旧言~,目前大一,现在学习Java,c,Python等 座右铭:松树千年终是朽,槿花一日自为荣。 望小伙伴们点赞👍收藏✨加关注哟💕💕 指针和数组笔试题 &…

【Linux】多线程 之 POSIX信号量

文章目录 1. 概念2. 信号量的工作机制3. 认识接口sem_init ——初始化信号量sem_destroy——销毁信号量sem_wait ——申请信号量sem_post ——释放信号量 4. 基于环形队列的生产消费模型原理解析代码代码解析ringqueue类构造析构push ——生产pop ——消费 代码实现Ringqueue.h…

精通Skia引擎,发挥应用程序中高性能图形的潜力

Skia是由Google开发的一个开源的2D图形库。它提供了丰富的图形绘制、图像处理和渲染功能,适用于多个平台,包括操作系统、浏览器和移动设备等。Skia主要用于处理2D图形的绘制、文字渲染、图像处理和用户界面的呈现。 特点和功能: 高性能&…

基于Javaweb实现ATM机系统开发实战(十一)存储交易记录

首先创建一个业务接口: package com.atm.service;import com.atm.pojo.RunMessage;//交易记录的业务接口 public interface RunMessageService{//添加交易记录public void addRunMessage(RunMessage runMessage) throws Exception ; }再完成业务接口的实现类&#…

iNav开源代码之FAILSAFE

iNav开源代码之FAILSAFE 1. 源由2. FAILSAFE类别3. FAILSAFE配置4. FAILSAFE阶段&状态机5. 参考资料 1. 源由 最近因为炸机,百思不得其解。 关于炸鸡的过程,就不再展开,都是“泪”啊!想进一步了解的,请参阅前面的…

科普一下Elasticsearch中BM25算法的使用

首先还是先了解几个概念,Elasticsearch是一个开源的分布式搜索和分析引擎,它使用一系列算法来计算文档的相关性分数(relevance score)。这些算法用于确定查询与文档的匹配程度,以便按相关性对搜索结果进行排序。以下是…

【C++】多线程编程一(初识并发和多线程)

目录 一、并发和并行的概念 1.并发 2.并行 3.并发和并行的区别 二、并发的途径 多进程并发 多线程并发 三、C11相关多线程编程的头文件 一、并发和并行的概念 1.并发 并发:指同一时刻只能有一条指令执行,但是多个进程指令被快速地轮换执行&#…

C语言--文件操作

文章目录 前言文件文件名 文件的打开和关闭文件指针文件的打开和关闭 文件的顺序读写fgetc、fputcfgets、fputsfprintf、fsanffread、fwrite 文件的随机读写fseekftellrewind 文本文件和二进制文件文件读取结束的判定feof 文件缓冲区 前言 在我们写完一个程序之后,…

【数据结构】树二叉树的概念以及堆的详解

⭐️ 往期相关文章 ✨链接1:【数据结构】顺序表 ✨链接2:【数据结构】单链表 ✨链接3:【数据结构】双向带头循环链表 ✨链接4:【数据结构】栈和队列 ⭐️ 树的概念 百度百科的解释:树是一种非线性的数据结构&#xf…

Jmeter四种关联方法讲解

目录 方法一,从前一个请求中取,用正则表达式提取器。 二、json path extractor 三、json extractor 四、XPath Extractor 方法一,从前一个请求中取,用正则表达式提取器。 具体方法,在需要获得数据的请求上右击添加…

【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库

目录 1,新建工程前的准备工作(了解)1.1下载相关STM32Cube 官方固件包(F1/F4/F7/H7) 2,新建HAL库版本MDK工程步骤(熟悉)2.1新建工程文件夹2.1.1Drivers文件夹2.1.2Middlewares文件夹2…

基数排序(Radix_Sort)

基数排序 (Radix Sort)-20230715 前言 基数排序适用于多关键字排序,与前述的比较排序不同,实现基数排序不需要对关键字进行比较和移动。简而言之,基数排序是一类借助多关键字排序的思想对单逻辑关键字实现排序的方法。 多关键字排序 先看…

SwiftUI 原生或利用 Vision 检测限定高度的 Text 视图能否完整显示文本的方法

功能需求 在 SwiftUI 开发中,为了节省空间我们往往会为内容很长的文本视图(Text)限定一个高度,然后让用户决定是否展开显示其完整内容。 如上图所示,为了节省空间我们对 Text 视图高度做了限制,然后根据文本长度自动显示或隐藏展开按钮,用户点击该按钮即可展开显示完整…

FL Studio21入门版编曲 2023年免费小白新手编曲工具

全能数字音乐工作站(DAW)编曲、剪辑、录音、混音,有了它就能把你的笔记本电脑变成全功能音乐工作室。 内置丰富插件,满足不同风格创作拥有强大的采样引擎,自带高品质打击乐、钢琴、弦乐、吉他等107种乐器效果。 流行…

C++-把字符串转换成整数

题目来源:牛客网 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0 数据范围:字符串长度满足 0≤n≤100 进阶:空间复杂度 O(1) O(1) &…

Mybatis执行SQL过程

文章目录 1. 相关代码2. 创建SqlSession3. 创建Mapper代理对象4.sql的执行4.1 MapperProxy.invoke()4.2 mapperMethod.execute()4.3 sqlSession.selectOne4.4 CachingExecutor.query()4.5 BaseExecutor.query方法4.6 SimpleExecutor.doQuery方法 1. 相关代码 Testpublic void …