异常处理(黑马学习笔记)

当前问题

登录功能和登录校验功能我们都实现了,下面我们学习下今天最后一块技术点:异常处理。首先我们先来看一下系统出现异常之后会发生什么现象,再来介绍异常处理的方案。

我们打开浏览器,访问系统中的新增部门操作,系统中已经有了 "就业部" 这个部门,我们再来增加一个就业部,看看会发生什么现象。

点击确定之后,窗口关闭了,页面没有任何反应,就业部也没有添加上。 而此时,大家会发现,网络请求报错了。

状态码为500,表示服务器端异常,我们打开idea,来看一下,服务器端出了什么问题。

上述错误信息的含义是,dept部门表的name字段的值 就业部 重复了,因为在数据库表dept中已经有了就业部,我们之前设计这张表时,为name字段建议了唯一约束,所以该字段的值是不能重复的。

而当我们再添加就业部,这个部门时,就违反了唯一约束,此时就会报错。

我们来看一下出现异常之后,最终服务端给前端响应回来的数据长什么样。

响应回来的数据是一个JSON格式的数据。但这种JSON格式的数据还是我们开发规范当中所提到的统一响应结果Result吗?显然并不是。由于返回的数据不符合开发规范,所以前端并不能解析出响应的JSON数据。

接下来我们需要思考的是出现异常之后,当前案例项目的异常是怎么处理的?

    ● 答案:没有做任何的异常处理

当我们没有做任何的异常处理时,我们三层架构处理异常的方案:

Mapper接口在操作数据库的时候出错了,此时异常会往上抛(谁调用Mapper就抛给谁),会抛给service。

service 中也存在异常了,会抛给controller。

而在controller当中,我们也没有做任何的异常处理,所以最终异常会再往上抛。最终抛给框架之后,框架就会返回一个JSON格式的数据,里面封装的就是错误的信息,但是框架返回的JSON格式的数据并不符合我们的开发规范。

解决方案

那么在三层构架项目中,出现了异常,该如何处理?

    ● 方案一:在所有Controller的所有方法中进行try…catch处理

        ○ 缺点:代码臃肿(不推荐)

    ● 方案二:全局异常处理器

        ○ 好处:简单、优雅(推荐)

全局异常处理器

我们该怎么样定义全局异常处理器?

定义全局异常处理器非常简单,就是定义一个类,在类上加上一个注解@RestControllerAdvice,加上这个注解就代表我们定义了一个全局异常处理器

在全局异常处理器当中,需要定义一个方法来捕获异常,在这个方法上需要加上注解@ExceptionHandler。通过@ExceptionHandler注解当中的value属性来指定我们要捕获的是哪一类型的异常

@RestControllerAdvice
public class GlobalExceptionHandler {

    //处理异常
    @ExceptionHandler(Exception.class) //指定能够处理的异常类型
    public Result ex(Exception e){
        e.printStackTrace();//打印堆栈中的异常信息

        //捕获到异常之后,响应一个标准的Result
        return Result.error("对不起,操作失败,请联系管理员");
    }
}

@RestControllerAdvice = @ControllerAdvice + @ResponseBody

————————————————————————————————————————

处理异常的方法返回值会转换为json后再响应给前端

重新启动SpringBoot服务,打开浏览器,再来测试一下添加部门这个操作,我们依然添加已存在的 "就业部" 这个部门:

此时,我们可以看到,出现异常之后,异常已经被全局异常处理器捕获了。然后返回的错误信息,被前端程序正常解析,然后提示出了对应的错误提示信息。

以上就是全局异常处理器的使用,主要涉及到两个注解:

    ● @RestControllerAdvice //表示当前类为全局异常处理器

    ● @ExceptionHandler //指定可以捕获哪种类型的异常进行处理

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

potplayer安装

官网 解压运行即可

小(2)型土石坝安全监测设施配置详解

小(2)型土石坝的安全监测是确保大坝稳定、安全运行的重要环节。为此,合理配置安全监测设施显得尤为重要。以下是对小(2)型土石坝安全监测设施配置的详细介绍。 一、渗流量监测 渗流量是反映大坝安全状况的关键指标之一。为准确监测渗流量,我们采用仪器量…

DC28V270V转AC36V115V航空逆变器

在当今的航空航天电源行业中,DC28V270V转AC36V115V航空逆变器发挥着至关重要的作用。作为一种关键的逆变器电源设备,DC28V270V转AC36V115V航空逆变器不仅在航空领域有着广泛的应用,还在许多其他领域发挥着重要作用。 一、DC28V270V转AC36V11…

C语言 常量

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。 常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。 常量就像是常规的变量,只不过常量的…

【前端素材】推荐优质在线高端蜂蜜商城电商网页Beejar平台模板(附源码)

一、需求分析 1、系统定义 在线高端蜂蜜商城是指一个专门销售高品质、高端蜂蜜产品的电子商务平台。这种商城致力于向消费者提供各种经过精心挑选、具有高营养价值和健康功效的蜂蜜产品。 2、功能需求 在线高端蜂蜜商城是指一个专门销售高品质、高端蜂蜜产品的电子商务平台…

JOSEF约瑟 FHP-33Q/4跳位、合位、电源监视综合控制继电器 凸出式板前接线 0.1-10S

FHP-33系列跳位、合位、电源监视综合控制继电器系列型号:FHP-33A/1跳位、合位、电源监视综合控制继电器;FHP-33A/2跳位、合位、电源监视综合控制继电器;FHP-33A/3跳位、合位、电源监视综合控制继电器;FHP-33A/4跳位、合位、电源监…

数据迁移方法论

文章目录 一. 什么是数据迁移1. 数据迁移与数据整合2. 数据迁移和数据复制3. 数据迁移的主要类型1. Storage migration2. 数据库迁移3. 应用迁移4. 数据中心迁移5. Business process migration(业务流程迁移)6. 云迁移 二. 数据迁移方法1.大爆炸式数据迁…

说一说kong日志级别

Kong官网:The Platform Powering the API World | Kong Inc. Kong Gateway:Kong Gateway | Kong Docs Kong Admin API:Admin API - Kong Gateway - v3.4.x | Kong Docs Kong 企业版社区:API Community for Developers and Industr…

Freesia项目目录结构

目录结构 前端目录: (目录结构来自layui-vue-admin) src文件下 api(前端请求后端服务的路由)assert(一些内置或必要的资源文件)layouts(全局框架样式组件)router&…

OPPO打响AI手机第一枪

明敏 发自 凹非寺 量子位 | 公众号 QbitAI 2024开年,AI趋势依旧高歌猛进。 一边,Sora爆火成为现象级AIGC应用,带动AI再度成为春节后全民热议的第一话题。另一边,手机厂商开始大举All in AI,“放弃传统智能手机”、“…

071:vue+cesium 实现下雨效果

第071个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中实现下雨效果,这里使用着色器来实现实例特效。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共120行)着色代码实现心得:专栏目标示例效果

基于java+springboot动物检疫信息管理系统设计和实现

基于java SSM springboot动物检疫信息管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

文件基础和文件fd

文章目录 预备知识C语言的文件接口系统调用文件fd 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。 预备知识 我们平时说文件就是说文件里…

【前端素材】推荐优质在线通用果蔬商城电商网页eStore平台模板(附源码)

一、需求分析 1、系统定义 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。它将不同种类的新鲜水果、蔬菜、干果、坚果等聚集在一起,为消费者提供方便、快捷的购物渠道。 2、功能需求 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。…

关键对话_

关键对话 https://www.bilibili.com/video/BV1Vh4y1E7sY 关键对话,是那些让你觉得很艰难,同时又非常重要的谈话 关键对话三个特征 1、对话双方的观点有很大差距, 比如说你和你父母观点差异很大,父母觉得到了一定年龄就该结婚啊…

C++:非静态成员默认初始化

C11之前只有常静态成员变量才能进行默认初始化,其它变量初始化时总要进行繁琐的过程 class A{int a; public:A():a(10){} };C11开始支持非静态成员的默认初始化,默认初始化和初始化参数列表同时初始化一个变量时会使用初始化参数列表,不进行…

IIS发布PHP网站字体404解决办法

最近在使用 IIS 发布 PHP 网站时,我遇到了一个前端问题,即字体库文件 404 错误。这个问题的根本原因是 IIS 未能正确识别字体文件类型,导致浏览器在加载页面时无法正确获取所需字体资源,进而触发了404错误。这样的问题会导致网站页…

自动生成多个有规律的python列表

问大家一些问题,平常在我们练习时如果在没有给定数据的情况下,手敲这样一个DataFrame 对象是不是很麻烦,而且容易出错,我想了一个办法让其自动生成,这样就省事省力。 首先这些数据都是有规则的依次递增的例如&#xf…

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

电脑桌面便签哪个好,好用的电脑桌面便签推荐

在如今信息爆炸的时代,人们的工作和生活节奏越来越快,记事和备忘变得尤为重要。而电脑桌面便签作为一种方便快捷的记录工具,备受广大用户青睐。那么,电脑桌面便签哪个好,哪个更加出色呢? 作为一名人事专员…