Springboot全局异常捕获及try catch区别解析
今天在码代码的时候突然想到这个问题,觉得有点困惑。在网上也翻阅不少帖子其中有一个帖子给了我一个思路,其实也是解释了基础概念。
概念一:try catch 语句在try里面捕获到异常之后会进入catch子句内,执行catch内的代码。
概念二:springboot中的全局异常处理在捕获到异常之后,异常代码之后的语句是不会再运行了的
那么从我一开始思路理解开始,这个时候我觉得这2个的功能用处都是在代码出现异常情况的时候对其进行处理,且向调用者(或者就是用户)返回一个友好的提示,那这2个有啥区别呢,重点来了……
业务场景一:某个字段必须保证唯一,例如:不允许存在同一个name的数据,这是大家开发过程中很常见的了,调用新增接口的时候你需要先查一遍该数据在库里是否存在,如果存在就返回“该数据已存在”,并且不再执行后面的插入动作。到此时我个人觉得try catch 和全局异常处理达到的效果是一样的。
业务场景二:某个字段是需要提示用户“该数据已存在”,但是但是但是……我也允许你新增一个同样的数据,我就只是单纯要提示一下你而已,并不阻止你继续插入这条数据。这个时候有木有突然觉得就不一样了,如果是全局异常处理的话,提示你“该数据已存在”之后就不运行后面的插入代码了,而try catch是可以在抛出异常信息“该数据已存在”的时候进入catch代码块执行插入操作的。
就是不要认为在有全局异常处理之后,try catch就没用了。不知道我这样算不算牵强的解释
图一(使用只全局异常的情况下,无法执行到else子句内的insert操作)
图二(在抛出异常之后,进入catch子句仍然执行insert动作)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Springboot之自定义全局异常处理的实现
前言: 在实际的应用开发中,很多时候往往因为一些不可控的因素导致程序出现一些错误,这个时候就要及时把异常信息反馈给客户端,便于客户端能够及时地进行处理,而针对代码导致的异常,我们一般有两种处理方式,一种是throws直接抛出,一种是使用try..catch捕获,一般的话,如果逻辑的异常,需要知道异常信息,我们往往选择将异常抛出,如果只是要保证程序在出错的情况下 依然可以继续运行,则使用try..catch来捕获. 但是try..catch会导致代码量的增加,让后期我们的代码变得臃肿且难以维护.当
-
SpringBoot学习之全局异常处理设置(返回JSON)
SpringBoot学习--全局异常处理设置(返回JSON) 需求 现在习惯使用ajax的方式发起请求,所以经常需要服务端返回一个json或者字符串. 控制全局的异常处理. 如果在单个方法中使用try,catch把方法包裹起来,工作量大,而且会异常的抛出而导致@Transactional注解的方法事务不会回滚. 说明 使用@ControllerAdvice注解 使用@ExceptionHandler注解 @ControllerAdvice 该注解是spring2.3以后新增的一个注解,主要是用来
-
Java异常处理机制try catch流程详解
在项目中遇到try...catch...语句,因为对Java异常处理机制的流程不是很清楚,导致对相关逻辑代码不理解.所以现在来总结Java异常处理机制的处理流程: 1.异常处理的机制如下:在方法中用 try... catch... 语句捕获并处理异常,catch 语句可以有多个,用来匹配多个不同类型的异常.对于处理不了的异常或者要转型的异常,在方法的声明处通过 throws 声明异常,通过throw语句拋出异常,即由上层的调用方法来处理该异常. try { 逻辑程序块 } catch(Excep
-
Android Studio中快捷键实现try catch等功能包含代码块的实现方法
Android Studio中快捷键实现try catch等功能包含代码块 1.windows系统下,只需选中需包含的代码块,按快捷键Ctry+Alt+T即可: 2.Ubuntu下由于快捷键已经被占用,故需要自行重新设定,设定过程如下: 点击file--->setting--->keymap 在右侧搜索栏中搜索surround,选中Surround With...,先点击右键,选择Remove Ctrl+Alt+T,然后再设置可行的快捷键即可. 如有疑问请留言或者到本站社区交流讨论,感谢阅读
-
spring boot 全局异常处理方法汇总
这篇文章主要介绍了spring boot 全局异常处理方法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import cn.sisyphe.framework.web.exception.DataException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.co
-
spring boot教程之全局处理异常封装
1|1简介 在项目中经常出现系统异常的情况,比如NullPointerException等等.如果默认未处理的情况下,springboot会响应默认的错误提示,这样对用户体验不是友好,系统层面的错误,用户不能感知到,即使为500的错误,可以给用户提示一个类似服务器开小差的友好提示等. 在微服务里,每个服务中都会有异常情况,几乎所有服务的默认异常处理配置一致,导致很多重复编码,我们将这些重复默认异常处理可以抽出一个公共starter包,各个服务依赖即可,定制化异常处理在各个模块里开发. 1|2配置
-
JS中用try catch对代码运行的性能影响分析
前言 之前一直没有去研究try catch对代码运行的性能影响,只是一直停留在了感觉上,正好最近开会交流学习的时候,有人提出了相关的问题.借着周末,正好研究一番. 前端线上脚本错误的捕获方法: window.JSTracker=window.JSTracker||[]; try{ //your code }catch(e){ JSTracker.push(e); throwe;//建议将错误再次抛出,避免测试无法发现异常 } 设计实验方式 简单的设计方案也就是对比实验. 空白组1:[无 try
-
Spring Boot处理全局统一异常的两种方法与区别
前言 在后端发生异常或者是请求出错时,前端通常显示如下 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Fri Jun 07 15:38:07 CST 2019 There was an unexpected error (type=Not Found, status=404). No message available
-
Java try catch finally异常处理组合详解
try catch finally组合:检测异常,并传递给catch处理,并在finally中进行资源释放. try catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理.对异常进行捕获处理 public class Demo04 { public static void main(String[] args) { int [] arr={}; //可能会发生异常的语句 int a=get(arr);//可以点第2个或者第3个 System.out.println(a);
-
Springboot全局异常捕获及try catch区别解析
今天在码代码的时候突然想到这个问题,觉得有点困惑.在网上也翻阅不少帖子其中有一个帖子给了我一个思路,其实也是解释了基础概念. 概念一:try catch 语句在try里面捕获到异常之后会进入catch子句内,执行catch内的代码. 概念二:springboot中的全局异常处理在捕获到异常之后,异常代码之后的语句是不会再运行了的 那么从我一开始思路理解开始,这个时候我觉得这2个的功能用处都是在代码出现异常情况的时候对其进行处理,且向调用者(或者就是用户)返回一个友好的提示,那这2个有啥区别呢,重
-
springboot如何添加全局异常捕获类
这篇文章主要介绍了springboot如何添加全局异常捕获类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前几天工作中遇到一个项目,前后端分离的,作为后端开发专注开发接口.对于程序中出现的异常如果不进行处理,将报错信息直接返回到前端十=时不优雅的,因此需要对异常进行捕获和处理,但是每个接口都单独处理异常则显得代码十分臃肿,因此写了个异常捕获类对全局出现的异常进行统一处理. 1.如果程序中出现异常如下: @RestController publ
-
Android 全局异常捕获实例详解
Android 全局异常捕获 今天就来说说作为程序猿的我们每天都会遇到的东西bug,出bug不可怕可怕的是没有出bug时的堆栈信息,那么对于bug的信息收集就显得尤为重要了,一般用第三方bugly或者友盟等等都能轻易收集,但是由于公司不让使用第三方,而安卓正好有原生的异常收集类UncaughtExceptionHandler,那么今天博客就从这个类开始. UncaughtExceptionHandler见名知意,即他是处理我们未捕获的异常,具体使用分两步 1.实现我们自己的异常处理类 publi
-
详解WPF中的APP生命周期以及全局异常捕获
目录 APP生命周期 窗体生命周期事件 全局异常捕获 APP生命周期 wpf项目目录中有一个App.xaml.cs文件,该文件中App是一个partical类,与之对应的另一partical部分在App.g.i.cs文件中,该文件是在编译的时候WPF自动生成的.程序的入口Main方法在该文件中定义. [System.STAThreadAttribute()] [System.Diagnostics.DebuggerNonUserCodeAttribute()] [System.CodeDom.C
-
Java处理异常2种机制关键字区别解析
这篇文章主要介绍了java处理异常2种机制关键字区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在异常处理的过程中,throws和throw的区别是? throws:是在方法上对一个方法进行声明,而不进行处理,而是向上传,谁调用谁处理. throw:是在具体的抛出一个异常类型. throws的栗子: throws的话,就是这个方法有可能会产生异常,而我只是将它声明出去,我自己不处理,如果有人调用的时候,可以知道,这个方法,有可能会抛出异
-
SpringBoot全局异常与数据校验的方法
异常处理是每个项目中都绕不开的话题,那么如何优雅的处理异常,是本文的话题.本文将结合SpringBoot框架一起和大家探讨下. 要思考的问题 在现在的前后端交互中,通常都规范了接口返回方式,如返回的接口状态(成功|失败)以及要返回的数据在那个字段取,或者说失败了以后提示信息从接口哪里返回,因此,如果想做全局异常,并且异常发生后能准确的返回给前端解析,那么需要异常发生时返回给前端的格式与正常失败场景的格式一致. 项目建立 利用idea 工具,很容易的搭建一个SpringBoot项目,要引入的mav
-
SpringBoot如何优雅地处理全局异常详解
前言 之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Controller下面,满屏幕的try{}catch,看着一点都不优雅,一点都不符合小明的气质,憋了这么久,小明今天终于决定对所有异常实施统一处理的方案. 开发准备 JDK8.正常的springboot项目 代码编写 通用异常处理 其实Spring系列的项目全局异常处理方式早已存在,只不过我们一直忙于搬
-
SpringBoot搭建全局异常拦截
1.异常拦截类的创建 package com.liqi.web.core.exception; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestControllerAdvice; import
-
如何基于Springboot完成新增员工功能并设置全局异常处理器
目录 1. 新增员工 1.1 需求分析 1.2 数据模型 1.3 程序执行流程 1.4 代码实现 2 全局异常处理 2.1 新增员工存在的问题 2.2 全局异常处理思路 2.3 全局异常处理器 2.4 全局异常处理器代码实现 2.5 测试 总结 1. 新增员工 1.1 需求分析 后台系统中可以管理员工信息,通过新增员工来添加后台系统用户.点击[添加员工]按钮跳转到新增页面,如下 当填写完表单信息, 点击"保存"按钮后, 会提交该表单的数据到服务端, 在服务端中需要接受数据, 然后将数据
-
SpringBoot如何优雅的处理全局异常
前言 本篇文章主要介绍的是SpringBoot项目进行全局异常的处理. SpringBoot全局异常准备 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要求 JDK:1.8 SpringBoot:1.5.17.RELEASE 首先还是Maven的相关依赖: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.
随机推荐
- Android微信自动抢红包插件优化和实现
- 详谈Python高阶函数与函数装饰器(推荐)
- JavaScript 异步调用框架 (Part 5 - 链式实现)
- ASP.NET技巧:为Blog打造个性日历
- Gridview利用DataFormatString属性设置数据格式的方法
- 在smarty模板中使用PHP函数的方法
- Eclipse开发环境导入android sdk的sample中的源码
- 如何设置mysql允许外网访问
- Android开发之开发者头条(一)启动页实现
- ASP 获取腾讯IP地址的代码
- Python 实现简单的shell sed替换功能(实例讲解)
- mysql密码忘记的修改方法
- JQuery遍历元素的父辈和祖先的方法
- 关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
- JavaScript-html标题滚动效果的简单实现
- apache访问根目录 配置作用域的相关资料
- Android开发中LayoutInflater用法详解
- asp.net动态添加js文件调用到网页的方法
- python用户管理系统的实例讲解
- PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析