SpringBoot全局异常ExceptionHandler
这个是我的全局异常处理类,以newThirdException(JSON。toJSONString(obj))形式抛出了这个自定义异常,不管从最底层的方法抛出上层不抛,还是从controller的入口开始都抛出,均无法精确匹配。下面分别是自定义异常和全局异常处理类,分析过程在末尾。
springbootstarterparent版本:2。3。12。RELEASE
第一次调用exceptionLookupCache为空,会通过getMappedMethod方法获取后再进行put,exceptionLookupCache是一个MapClasslt;?extendsThrowable,Method
类型的ConcurrentReferenceHashMap结构。
第2步,核心代码逻辑:从mappedMethods中解析自定义异常和自定义异常的处理方法映射集合。mappedMethods是类型为MapClasslt;?extendsThrowable,Method的HashMap结构在服务启动的时候通过init方法加进去。有异常抛出时通过mappedException。isAssignableFrom这个native方法判断mappedMethods的keys,keys就是在全局异常中定义的所有异常类,包括自定义异常。
第3步:。common。basic。exception。ThirdException在通过isAssignableFrom判断时返回了false,所以没有加到matches里面,也就没有机会参加排序,就导致没有匹配到准确的处理方法。
启动的时候mappedMethods里面可以正常加进去,但是isAssignableFrom判断时返回了false,随后调用的时候mappedMethods就为空了,这很正常,因为它就是个reference的ConcurrentHashMap。但导致exceptionLookupCache会加进去一个ThirdExceptionnull的kv,结果就是找不到ThirdException对应的处理方法,进而直接走了ExceptionHandler(valueException。class)
感觉就像是代码问题,有什么解决方案吗?解决了有红包