自定义全局异常

2023-11-19

1.自定义响应结果码 接口

public interface ResultCode {
    //操作是否成功,true为成功,false操作失败
    boolean success();
    //操作代码
    int code();
    //提示信息
    String message();

}

2.自定义异常类

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 自定义异常类
 */
@Data //lombok提供,getter,setter方法,toString
@AllArgsConstructor //lombok提供,有参构造
public class CustomException extends RuntimeException{
    private ResultCode resultCode;
}

3.自定义异常捕获类

包括捕获自定义异常类,也包括不可预知异常。

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 定义异常捕获类
 * 使用 @ControllerAdvice和@ExceptionHandler注解来捕获指定类型的异常
 */
@ControllerAdvice
public class ExceptionCatch {

    //捕获ExceptionCatch异常
    @ExceptionHandler(CustomException.class) //CustomException是自定义异常类
    @ResponseBody
    public ResponseResult customException(CustomException e){
        ResultCode resultCode = e.getResultCode();
        return new ResponseResult(resultCode);
    }

    //不可预知异常
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ResponseResult exception(Exception e){
        return new ResponseResult(CommonCode.SERVER_ERROR);//对于不知异常抛出99999异常
    }

}

4.自定义异常枚举类CommonCode

自定义异常码和描述,实现ResultCode接口。

import lombok.ToString;


@ToString
public enum CommonCode implements ResultCode{

    SUCCESS(true,10000,"操作成功!"),
    FAIL(false,11111,"操作失败!"),
    UNAUTHENTICATED(false,10001,"此操作需要登陆系统!"),
    UNAUTHORISE(false,10002,"权限不足,无权操作!"),
    VALIDATA(false,10003,"非法参数!"),
    SERVER_ERROR(false,99999,"抱歉,系统繁忙,请稍后重试!");

//    private static ImmutableMap<Integer, CommonCode> codes ;
    //操作是否成功
    boolean success;
    //操作代码
    int code;
    //提示信息
    String message;
    private CommonCode(boolean success,int code, String message){
        this.success = success;
        this.code = code;
        this.message = message;
    }

    @Override
    public boolean success() {
        return success;
    }
    @Override
    public int code() {
        return code;
    }

    @Override
    public String message() {
        return message;
    }


}

测试

在业务方法中添加。

throw new CustomException(CmsCode.CMS_ADDPAGE_EXISTSNAME);//使用自定义异常

测试未知异常:

在业务方法中添加下面除0错进行测试。

int i = 1/0;

注意:

2.自定义异常类

1.ExceptionHandler(CustomException.class)中的异常类要和下面方法入参一致,否则会报错。

2.控制台报错,SpringBoot引导类中@SpringBootApplication注解没有扫到异常捕获类CatchException所在的包。

解决:在引导类上加注解@ComponentScan(basePackages = {"com.lxw.exception"})

3.控制台不报错,但是页面也不显示错误信息,排除前端问题;异常捕获类的方法上没有加ResponseBody注解。

原因:页面不需要跳转,要传json;并且注意不是@RequestBody注解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义全局异常 的相关文章

随机推荐

  • KEIL5报 core_cm4.h(169): error:错误解决办法

    KEIL4的工程转到KEIL5上面出现 Core core cm4 h 169 error 5 cannot open source input file core cmInstr h No such file or directory 这
  • javascript脚本何时被执行

    javascript脚本何时被执行 javascript脚本可以嵌入在内的任意地方 但它何时被调用呢 当浏览器打开HTML文件后 会直接运行不是声明函数的脚本或通过事件调用脚本函数 下面分析这几种情况 1 浏览器在打开页面时执行脚本 当浏览
  • 漫谈软件测试工程师与mercury认证

    漫谈软件测试工程师与mercury认证 出自无忧网 作者 叶赫华 sinckyzhang hotmail com 自从本人从事软件测试培训以来 接触了太多的软件测试工程师 发觉从业者多数存在以下现象 刚刚毕业 踏入IT行业 不懂开发或开发经
  • git分离出分支

    git将历史提交的某个commit作为终点分离出一个新的分支 最近遇到了一个问题 需要从历史提交中的某次commit分离出一个新的分支 使用下面的命令 git checkout b 新分支名 某次commitId 例如 git checko
  • Vue3状态管理库Pinia——核心概念(Store、State、Getter、Action)

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 正逐渐往全干发展 个人状态 研发工程师 现效力于中国工业软件事业 人生格言 积跬步至千里 积小流成江海 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 3项目实战 Node js
  • Filter

    Filter 过滤器 Filter 它是JavaWeb三大组件之一 另外两个是Servlet和Listener 它是在2000年发布的Servlet2 3规范中加入的一个接口 是Servlet规范中非常实用的技术 Filter是一个接口 如
  • Coding Block维护客户化字段

    转载自 http blog sina com cn s blog 4298a2c80102xhco html SAP系统是个各个模块高度集成 无缝衔接的系统 特别是财务模块与各个业务模块的集成程度 是比较高的 因此 财务核算时 会涉及的大量
  • Java 中的自动装箱和拆箱详解

    目录 1 Java 中的自动装箱 2 Java 中的自动拆箱 3 自动装箱和拆箱总结 4 在Java中怎样避免自动装箱和拆箱 1 Java 中的自动装箱 自动装箱是 Java 编译器在基本类型和它们对应的包装类之间进行的自动转换 例如 将
  • TCP协议,TCP报头及特点基础介绍

    目录 TCP协议 TCP协议特点 TCP协议适用场景 TCP包首部 什么是TCP连接 如何唯一确定一个TCP连接 有一个 IP 的服务器监听了一个端口 它的 TCP 的最大连接数是多少 TCP与UDP的区别 TCP协议 TCP是一种面向字节
  • 格式化 NameNode 提示 SHUTDOWN_MSG: Shutting down NameNode at xxx/xxx.xxx.xxx.xxx

    在使用 hadoop namenode format 格式化 NameNode 时 提示如下错误 SHUTDOWN MSG Shutting down NameNode at xxx xxx xxx xxx xxx 网上提示 需要让 hos
  • 蜣螂算法优化BP神经网络(DBOBP)数据预测分类模型

    代码运行效果截图
  • Spring事务传播行为,事务隔离级别以及事务失效的场景

    文章目录 事务的实现 事务的传播行为 propagation behavior 事务的隔离级别 事务失效的原因 访问权限 方法被final修饰 方法内部调用 解决办法 新加一个XxxHelpService类 解决办法 在该Service类中
  • 【1day】复现泛微OA某版本SQL注入漏洞

    注 该文章来自作者日常学习笔记 请勿利用文章内的相关技术从事非法测试 如因此产生的一切不良后果与作者无关 目录 一 漏洞描述 二 影响版本 三 资产测绘 四 漏洞复现 一 漏洞描述 泛微e cology是一款由泛微网络科技开发的协同管理平台
  • 活动报名|分布式人工智能:可扩展性、效率和泛化性

    2023年05月25日 星期四 14 00 15 30 智源社区 智源Live 第42期 线上活动将在线举办 阅读原文 报名即可参加 活动主题 分布式人工智能 可扩展性 效率和泛化性 安波 安波是新加坡南洋理工大学校长委员会讲席教授和南洋理
  • dc-8 靶机渗透学习

    信息收集 扫描当前网段 nmap sP 192 168 202 0 24 扫描开放端口 nmap A p v 192 168 202 147 访问靶机的80端口 用Wappalyzer识别框架 随便看看页面 简单对存在的参数进行sql测试
  • JNI字段描述符“([Ljava/lang/String;)V”

    Ljava lang String V 它是一种对函数返回值和参数的编码 这种编码叫做JNI字段描述符 JavaNative Interface FieldDescriptors 一个数组int 就需要表示为这样 I 如果多个数组doubl
  • 项目实训:bd搜索爬虫

    百度爬虫 1 requests库使用 2 lxml库使用 3 pandas库使用 4 数据清洗 5 数据分析可视化 结构分析 接下来的对目标爬虫的结构进行分析 爬虫思路 分析数据来源在哪 如何模拟的像真实用户 如果提取数据 如何保存数据 文
  • UE4 射线检测案例(C++)

    UE4 射线检测 C 开发场景 玩家 C 开发的 武器 C 射线检测函数 蓝图 C 效果 制作流程 添加开火按键映射 新建一个继承ACharacter的C 用蓝图继承刚刚新建的C 然后设置好游戏模式 我 这是是 用了一个枚举 其实你直接调用
  • Linux-ubuntu系统查看显卡型号、显卡信息详解、显卡天梯图

    本文将介绍如下内容 如何在ubuntu系统中查看显卡型号 其他文章大多只介绍了命令而未介绍如何对应显卡型号 在ubuntu系统中显卡详细信息 以及所代表的含义 显卡天梯图 2019年7月 一 查看显卡型号 1 查看显卡型号命令 lspci
  • 自定义全局异常

    1 自定义响应结果码 接口 public interface ResultCode 操作是否成功 true为成功 false操作失败 boolean success 操作代码 int code 提示信息 String message 2 自