SpringBoot全局异常@ExceptionHandler无法精确匹配问题分析
创始人
2024-03-25 01:59:55
0

这个是我的全局异常处理类,以new ThirdException(JSON.toJSONString(obj))形式抛出了这个自定义异常,不管从最底层的方法抛出上层不抛,还是从controller的入口开始都抛出,均无法精确匹配。下面分别是自定义异常和全局异常处理类,分析过程在末尾。


spring-boot-starter-parent版本:2.3.12.RELEASE

第一次调用 exceptionLookupCache 为空,会通过getMappedMethod方法获取后再进行put,exceptionLookupCache 是一个Map, Method>

类型的
ConcurrentReferenceHashMap 结构。

第2步,核心代码逻辑:从mappedMethods 中解析自定义异常和自定义异常的处理方法映射集合。mappedMethods 是类型为Map, Method>的HashMap结构在服务启动的时候通过init***方法加进去。有异常抛出时通过
mappedException.isAssignableFrom这个native方法判断mappedMethods的keys,keys就是在全局异常中定义的所有异常类,包括自定义异常。

第3步:***
.common.basic.exception.ThirdException 在通过 isAssignableFrom 判断时返回了false,所以没有加到 matches 里面,也就没有机会参加排序,就导致没有匹配到准确的处理方法。

启动的时候mappedMethods 里面可以正常加进去,但是isAssignableFrom 判断时返回了false,随后调用的时候mappedMethods 就为空了,这很正常,因为它就是个reference的ConcurrentHashMap。但导致exceptionLookupCache 会加进去一个ThirdException->null 的kv,结果就是找不到ThirdException对应的处理方法,进而直接走了@ExceptionHandler(value = Exception.class)

感觉就像是代码问题,有什么解决方案吗?解决了有红包

相关内容

热门资讯

用心做好每一块电池的欣旺达,因... 这两天国内动力电池生产厂商欣旺达遇到麻烦事了,因其所生产的电芯存在质量问题被威睿电动汽车技术(宁波)...
以案为鉴筑防线 以审促廉扬清风... 为充分发挥以案释法、以案说纪的警示教育作用,进一步加强党风廉政建设,提高党员干部的法纪意识和廉洁意识...
新加坡国立大学东亚研究所高级研... 由三亚市人民政府主办,《财经》杂志、财经网、《财经智库》、三亚中央商务区管理局、三亚经济研究院承办的...
原创 全... 在国家有关调查力量进驻南京之后,一个并不显眼、却耐人寻味的现象悄然出现了。 短时间内,全国多地博物馆...
跨境金融研究院院长王志毅:离岸... 由三亚市人民政府主办,《财经》杂志、财经网、《财经智库》、三亚中央商务区管理局、三亚经济研究院承办的...
原告向法官出示证据,右下角赫然... 近日,湖北孝感大悟法院民二庭在审理一起房屋租赁合同纠纷案时,精准识破原告方利用AI技术伪造证据的行为...
美国纽约州出台法律约束“成瘾性... 美国纽约州州长凯茜·霍楚尔26日宣布,根据该州新出台的一项法律,具备无限刷新、自动播放和算法推送功能...
富安娜理财纠纷一审落槌,中信证... 乐居财经 李兰经历近三年后,富安娜(002327.SZ)理财纠纷有了新进展。 12月25日,富安娜发...
从合作伙伴到对簿公堂:威睿起诉... 12月26日,欣旺达发布公告,其全资子公司欣旺达动力科技股份有限公司(下称“欣旺达动力”)因买卖合同...
突发!俄称已控制库皮扬斯克;泽... 俄乌,突传大消息! 俄国防部称已控制库皮扬斯克 俄罗斯国防部12月27日在每日例行通报中说,库皮扬斯...