SpringBoot 异常精准匹配
2023-08-18 10:49 作者:MicroShuai | 我要投稿
源码包:org.springframework.web.method.annotation.ExceptionHandlerMethodResolver
1.异常处理方法解决器:发现@ExceptionHander 方法中给定的类,和它的超类通过给的方法解决 所给类型的异常

2.mappedMethods

初始存放 异常 的容器mappedMethods的数据结构为为 HashMap,初始化容量为16,默认存放16个异常

小知识: <Class<? extends Throwable>> 传入的异常字节码类文件必须为继承Throwable类

3.通过matchaes.sort() 排序 返回集合中的异常类型,sort集合中 调用了ExceptionDepthComparator()比较器

4.ExceptionDepthComparator比较器比较规则

让声明的异常类型 和 所比较的异常类型比较
使用递归 :每一次找 exceptionToMatch的父类 , 并且深度+1 (离最终的异常类越近,深度越大)
如果找到 返回 比较的深度
如果没找到,则返回Integer类型的最大值