最新要闻
- 【防御“杜苏芮”】永春:农户抢收水稻
- realme真我GT5来了:骁龙8 Gen2 下月登场
- 《封神第一部》申公豹“飞头术”太惊悚 夏雨揭秘幕后
- 妙鸭相机爆火!央视起底9.9元AI写真乱象:业内人士建议谨慎用
- 排放11.1亿吨二氧化碳!加拿大森林大火严重污染地球
- SpaceX火箭在地球上空击穿了一个洞:干扰GPS
- 七月的天山写的哪个季节(七月的天山写作顺序)
- 孙军林(关于孙军林简述)
- 有惊无险!《英雄联盟》LPL季后赛JDG3:2战胜LNG:EDG拿“复活甲”
- 又一起?电动汽车自燃引发货轮大火 日产汽车或遭重创
- 南昌经开区:公益托管班让孩子们乐享缤纷夏日
- 联想拯救者R9000X 2023配置出炉:锐龙7 7840H+RTX 4060
- 德国之后 法国部长也大赞中国汽车:希望能在法国生产
- 新组件制作中 中国制造商暗示新Switch24年初发布!
- 营收首破10000亿!佳能Q2财报出炉:相机居然卖这么好
- 东方甄选直播间被关3天?官方火速澄清:账号正常营业 别误读
手机

英国房地产因利率上升陷入困境 房价正以2011年来最快速度下跌

宁夏评选出上半年10名“宁夏好人” 95后消防员因敬业奉献入选
- 英国房地产因利率上升陷入困境 房价正以2011年来最快速度下跌
- 宁夏评选出上半年10名“宁夏好人” 95后消防员因敬业奉献入选
- 离婚时共同债务应该怎么处理?
- 华为云盘古大模型3.0正式发布
- 支持自动长文生成,WPS AI发布:基于大语言模型的智能办公助手
- 《街头霸王6》全球总销量突破200万份 卡普空再次为其玩家送上礼物
家电
看完这篇,SpringBoot再也不用写try/catch了
前言
使用 SpringBoot 开发 Web 应用时,异常处理是必不可少的一部分。在应用中,异常可能会出现在任何地方,例如在控制器、服务层、数据访问层等等。如果不对异常进行处理,可能会导致应用崩溃或者出现未知的错误。因此,对于异常的处理是非常重要的。
本篇主要讲述在SpringBoot 中,如何用全局异常处理优雅的处理异常。
(资料图片仅供参考)
为什么要优雅的处理异常
如果我们不统一的处理异常,开发人员经常会在代码中东一块的西一块的写上 try catch代码块,长久以往容易堆积成屎山。
@Slf4j@Api(value = "User Interfaces", tags = "User Interfaces")@RestController@RequestMapping("/user")public class UserController { /** * @param userParam user param * @return user */ @ApiOperation("Add User") @ApiImplicitParam(name = "userParam", type = "body", dataTypeClass = UserParam.class, required = true) @PostMapping("add") public ResponseEntity add(@Valid @RequestBody UserParam userParam) { // 每个接口都需要手动try catch try { // do something } catch(Exception e) { return ResponseEntity.fail("error"); } return ResponseEntity.ok("success"); }}
那我们应该如何实现统一的异常处理呢?
使用 @ControllerAdvice + @ExceptionHandler注解
@ControllerAdvice 定义该类为全局异常处理类
@ExceptionHandler 定义该方法为异常处理方法。value 的值为需要处理的异常类的 class 文件。
首先自定义异常类 BusinessException :
/** * 业务异常类 * @author rango */@Datapublic class BusinessException extends RuntimeException { private String code; private String msg; public BusinessException(String code, String msg) { this.code = code; this.msg = msg; }}
然后编写全局异常类,用 @ControllerAdvice
注解:
/***全局异常处理器*@authorrango*/@ControllerAdvicepublicclassGlobalExceptionHandler{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(GlobalExceptionHandler.class);/***处理Exception异常*@paramhttpServletRequesthttpServletRequest*@parame捕获异常*@return*/@ResponseBody@ExceptionHandler(value=Exception.class)publicResponseEntityexceptionHandler(HttpServletRequesthttpServletRequest,Exceptione){logger.error("服务错误:",e);returnnewResponseEntity("******","服务出错");}/***处理BusinessException异常*@paramhttpServletRequesthttpServletRequest*@parame捕获异常*@return*/@ResponseBody@ExceptionHandler(value=BusinessException.class)publicResponseEntitybusinessExceptionHandler(HttpServletRequesthttpServletRequest,BusinessExceptione){logger.info("业务异常报错!code:"+e.getCode()+"msg:"+e.getMsg());returnnewResponseEntity(e.getCode(),e.getMsg());}}
定义了全局异常处理器,项目就可以对不同的异常进行统一处理了。通常,为了使 controller 中不再使用任何 try/catch
,会在 GlobalExceptionHandler
中对 Exception
做统一的拦截处理。这样其他没有用 @ExceptionHandler
配置的异常就都会统一被处理。
遇到异常时主动抛出异常
在业务中,遇到业务异常的地方,我们直接 throw 抛出对应的业务异常即可。如下所示
thrownewBusinessException(ERROR_CODE,"用户账号/密码有误");
在 Controller 中的写法
Controller 中,不需要再写 try/catch
,除非特殊场景。
@RequestMapping(value="/test")publicResponseEntitytest(){ResponseEntityre=newResponseEntity();//业务处理returnre;}
结果展示
异常抛出后,返回如下结果。
{"code":"E0014","msg":"用户账号/密码有误","data":null}
注意!!!
- 抛出的异常如果被代码内的
try/catch
捕获了,就不会被GlobalExceptionHandler
处理 - 异步方法中的异常不会被全局异常处理(多线程)
- 不是 controller 层抛出的异常才能被
GlobalExceptionHandler
处理,只要异常最后是从 contoller 层抛出去的都可以被捕获并处理
总结
本文介绍了使用 SpringBoot 时,如何通过配置全局异常处理器统一处理项目中的一些通用的异常,避免程序员不断的写try/catch导致的代码冗余,有利于代码的维护。
关键词:
-
-
-
-
看完这篇,SpringBoot再也不用写try/catch了
【防御“杜苏芮”】永春:农户抢收水稻
realme真我GT5来了:骁龙8 Gen2 下月登场
《封神第一部》申公豹“飞头术”太惊悚 夏雨揭秘幕后
妙鸭相机爆火!央视起底9.9元AI写真乱象:业内人士建议谨慎用
排放11.1亿吨二氧化碳!加拿大森林大火严重污染地球
SpaceX火箭在地球上空击穿了一个洞:干扰GPS
七月的天山写的哪个季节(七月的天山写作顺序)
孙军林(关于孙军林简述)
有惊无险!《英雄联盟》LPL季后赛JDG3:2战胜LNG:EDG拿“复活甲”
又一起?电动汽车自燃引发货轮大火 日产汽车或遭重创
五分钟了解Spark之RDD!!
南昌经开区:公益托管班让孩子们乐享缤纷夏日
恒大汽车:股票将于28日上午9时复牌
联想拯救者R9000X 2023配置出炉:锐龙7 7840H+RTX 4060
德国之后 法国部长也大赞中国汽车:希望能在法国生产
新组件制作中 中国制造商暗示新Switch24年初发布!
uni-app写微信小程序,data字段循环引用
营收首破10000亿!佳能Q2财报出炉:相机居然卖这么好
东方甄选直播间被关3天?官方火速澄清:账号正常营业 别误读
剑指比亚迪宋EV!全新哈弗枭龙EV谍照曝光
空调不能长时间吹 身体受不了!真的吗?
快递向服务生产延伸 “铁陆空”支撑让快递“快”到极致
丝丝关爱沁心脾!炎炎夏日,长征镇为养老机构老人送清凉
网传理想汽车起诉成都一家“理想画室” 理想官方回应
部分已支持5nm 国产EDA老大华大九天利润翻倍:“芯片之母”大卖
从121米高悬崖驾车坠落 iPhone 14成功救了他一命
一杯啤酒几百块 是智商税吗?
游戏、AI全都要 摩尔线程国产显卡解锁新技能:一键安装AI画图应用
新洲区人才安居购房补贴申请流程
税控盘锁死可以跨区解锁吗 金税盘锁死可以跨区解锁吗
智能制造:数字化未来,开启工业新纪元!
Shiro实战教程(整合SpringBoot,全网最强)
灵雀云Alauda MLOps 现已支持 Meta LLaMA 2 全系列模型
69岁单霁翔院长录综艺好拼,清理荷塘亲力亲为!
哈尔滨红旗大街道路更新改造东直路至先锋路段完工
永鼎股份:全资孙公司获得线束项目定点通知书
澳洲11岁女孩拥有百万资产打算12岁退休:已是一家玩具公司CEO
Win11更新“复活”老问题!部分应用将导致开始菜单失效
NVIDIA AI显卡炒作到50万元:国内想买还得看跟黄仁勋关系
大众巨资入股小鹏!小鹏汽车:我们提供平台和技术 大众做制造
曝光FSD撞路障被解雇后 前员工又搞事:特斯拉自动驾驶会闯红灯
白居易花非花歌曲创作背景(白居易的《花非花》的写作背景)
郑州市未来路执法中队深化建筑垃圾清理共创宜居环境
[数据结构笔记] 线性表
Python数据可视化-地图可视化
2023-7-27WPF的ContextMenu的传参绑定方式
中央财经大学绿金院支持中财绿指发布企业绿棕收入数据库
每日机构分析:7月27日
常州城建60亿元小公募审核“终止”,项目受理日期超1年
私募资管迎备案新规
cmo是什么职位(cio是什么职位)
女足世界杯彩经:山姆大婶再拔郁金香
韩国称发现世界首个室温超导体 Epic:要是真的 我送10款游戏
起猛了!日本Key社母公司Visual Art's卖身腾讯成子公司
终于坐不住了!奔驰V级正式曝光 竞争国产MPV市场
信阳市首家街头机采献血屋,启用!
东风集团股份(00489)7月27日斥资约934.17万港元回购253万股
开创电气(301448)7月27日主力资金净卖出319.06万元
万科与万达长春合作项目纠纷已基本达成和解 万达商管部分被冻结股权即将解冻
痛失网易30K之二:看你牛逼轰轰,请写一个阻塞队列
GPS北斗卫星时钟服务器(NTP时间服务器)助力标准化考场建设
资源成本降低70%!华为MetaERP资产核算的Serverless架构实践
人大金仓V8R6版本体验
(史上最强)打造一款强大思维导图测试用例工具《TMind用例思维导图工具》
中信证券:预计7月为本轮最后一次加息的概率较大
鹏华基金固收团队:下半年把握股债双重机遇
【财经分析】山水比德连续3个“20cm”涨停背后 业绩大幅下滑 业务深度绑定房地产
【金融街发布】中国人民银行副行长张青松:超过1000家“专精特新”中小企业在A股上市
楼市半年考·房企| 上半年“公开隐身”却曲线拿地,万科频繁人事换防能否解压业绩?
渑池县市场监管局郭晓荣获“2020-2021年度全国无偿献血奉献奖银奖”
2名中超球员被带走!还有1位中甲门将,名记:不涉案的俱乐部太少
小米MIX Fold 3终于预热了!米粉直呼“等得很煎熬”
真爱粉!网友花3万多元一次性购入三星全家桶
弯道超车?宝马中国开启L3级自动驾驶研发 最快年底上线
美国一公司称推出革命性“永久”电池:每天充放电3次 能用30年
破除手游MMO“热度魔咒”:《逆水寒》手游玩家数突破4000万
浙江欣海自主研发甲醇燃料加注船获CCS国内首个原则性认可
GPS北斗网络时钟同步器(卫星时钟发生器)插卡式模组设计方案
视频交友源码开发搭建平台用户资料功能:小功能有大用处!
决策单调性
重庆警方打掉一组织跨境偷渡团伙
“如果微信显示已读的话”上热搜 微信回应:放心 没有“如果”
《无畏契约》国服现已正式开服!所有玩家免费畅玩
7月12日迎来火星北半球的夏至:火星上夏季凉爽
美国富豪用17岁儿子血浆换血失败:疗法没检测到任何好处
解铃还须系铃人 马自达成功翻盘 CX-50销量暴涨726.64%
青海刚察再现“半河清水半河鱼”奇观
算法(施工中)
大连热电:关于重大资产重组媒体说明会情况公告
哈尔滨特产俄式风味:秋林格瓦斯1.66元/瓶大促
川浙“互宠”!浙江494家景区向四川人减免门票
凉山女孩本科4年存下16万:即将去清华园追梦
神似极氪009!沃尔沃首款纯电MPV车型EM90曝光 专供中国市场
印度北部迎强降雨 天空惊现巨型陆架云:恍如末世
得邦照明7月12日盘中涨幅达5%
【后端面经-架构】RabbitMQ简介
网评:数字产业依旧势头强劲活力充沛
四川江油暴雨:河水暴涨 多车被淹
8月见!小米MIX Fold 3入网:支持67W快充