SpringBoot统一异常处理参数校验异常返回定制数据

时间有些紧迫,所以文中有些待考证的地方还未进行测验深究,大家见谅。
自己造算是了个轮子,个人感觉这个轮子以后很多地方都会用到的吧。

需求起因:
这两天刚开始写SpringBoot,用到了JPA的东西,然后对于后端处理业务比较重要的一块就是参数的校验。个人目前看来校验分两类,第一类是类似Validator的东西,就是根据输入的参数直接在实体上设定好规则,然后传入参数的时候进行检验合理性,比如NotNull(目前仅用到了于javax包下的validation里面的那些constraints),出现异常就抛出。第二类就是涉及到数据库的一种校验,比如Unique校验,据我目前所知好像hibernate本身是没有替我们进行数据库比对,所以涉及到数据库中的校验就需要自己来限制了。
然后在网上看到了关于统一异常处理机制的东西,用途就是对于各种校验产生的异常,也需要像其他封装好的数据一样,对前台展示统一的数据。第二类的校验由于涉及到了数据库,所以一般的操作就是自己查一下数据库,然后如果发现异常就手动返回一个正规数据,并不是真正意义上的异常。这种方式返回异常的时候可能跟原来差不太多,可能不够优雅?不对。好像是这么做不调用异常的话,涉及到事务的情况好像是没办法回滚的。(事务这块也有待考证,网上有的说只有没被捕获的RuntimeException才能触发事务回滚)补充:实验测试,首先开启事务必须要声明 @Transactional(方法级) 注解,然后抛出的继承的继承RuntimeException就可以触发回滚,之前提到的捕获应该指的是try catch的捕获,前后文的异常捕获器并不会导致事务不会回滚。
而对于第一类的异常,toString出来的对象就比较麻烦了。对于我这种刚写Spring两三天的人,给我那么那么多数据我也没啥用,也看不懂。但是里面的错误原因,也就是之前我在参数校验时候自定义的返回数据却是我想要的。按照常规的做法是,在Controller层绑定一个BindingResult的对象,跟@Valid和其他请求参数一起传进来,然后再在BindingResult里头挨个处理,遍历拿出来结果进行获取。这样才能对结果进行定制处理,不然只能在控制台报一些神仙错误。想一下这时候就会发现,对于参数验证的报错和对BindingResult的处理会再每个Controller里头都写一次吧差不多。因为要返回统一的错误数据嘛。异常捕获机制就显得雪中送炭了这时候。
这时候在网上看到了关于一些统一异常处理的东西,里面用到了全局异常捕获器。就是对于某些特有的异常,可以做特有的处理。找到控制台对于参数校验的一些异常,然后在捕获器里头进行捕获,特别处理。嗯逻辑好简单,哇,迷了我几个小时的东西隔一天一看就变得。。没那么有成就感了。然后就可以抛出的异常进行统一的返回数据了。并且在Controller里面,就不需要开发人员再对参数的异常进行管理了

附上代码:


image.png

全局异常捕获器


image.png

统一返回数据类型
image.png

自定义异常处理类

最后希望踩我的同学出来交流一下,个人也是小白一枚~希望指点

有关的项目源码在我的个人项目中均可以找到,甚至发现更神奇的东西噢~(在线表单项目,可自定义表单组件)
小的在此请大家闲暇之余赏个Star嘻嘻嘻
https://github.com/syhdeclan/OnlineFormJava

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容