栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot2异常处理原理分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot2异常处理原理分析

错误处理的默认规则(什么都不配的情况下的规则)

默认情况下,Spring Boot提供/error处理所有错误的映射
对于机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息。对于浏览器客户端,响应一个“ whitelabel”错误视图,以HTML格式呈现相同的数据如下图:

异常处理自动配置原理

在处理handler发生的异常,遍历所有的 handlerExceptionResolvers,看谁能处理当前异常【HandlerExceptionResolver处理器异常解析器】

  1. 首先使用DefaultErrorAttributes先来处理异常,把异常信息保存到request域中,并且返回为null。
  2. 接着使用ExceptionHandlerExceptionResolver和ResponseStatusExceptionResolver和DefaultHandlerExceptionResolver进行解析。
  • ExceptionHandlerExceptionResolver处理@ControllerAdvice+@ExceptionHandler处理全局异常
  • @ResponseStatus+自定义异常 ;底层是ResponseStatusExceptionResolver , 把
    responsestatus注解的信息底层调用 response.sendError(statusCode, resolvedReason),tomcat发送的/error,这里的/error会被底层的BasicErrorController处理。
  • Spring底层的异常,如参数类型转换异常;DefaultHandlerExceptionResolver 处理框架底层的异常。
  1. 如果上面默认没有任何人处理器处理异常,就会被抛出。

BasicErrorController处理流程

自定义错误页

error/404.html error/5xx.html;有精确的错误状态码页面就匹配精确,没有就找 4xx.html;如果都没有就触发白页

@ControllerAdvice+@ExceptionHandler处理全局异常;

底层是 ExceptionHandlerExceptionResolver 支持的,处理标注了ExceptionHandler注解的异常解析器

@ResponseStatus+自定义异常====》@ResponseStatus:自定义异常

底层是 ResponseStatusExceptionResolver ,即标注了 ResponseStatus注解的异常处理解析器
把responsestatus注解的信息底层调用response.sendError(statusCode, resolvedReason);tomcat发送的/error

Spring底层的异常,如参数类型转换异常;DefaultHandlerExceptionResolver 处理框架底层的异常。

底层默认由tomcat发送/error请求,sendError立即结束当前请求,但是springmvc底层有basicErrorController专门来处理/error请求,如果用户没有自定义错误页,那么默认显示错误白页

自定义异常解析器

实现HandlerExceptionResolver,重写resolveException()方法,然后把这个类加到springboot容器中(可以使用@Component放到容器中)。

注意:直接放到容器中不能使用,因为这个放到容器中我们解析器会被放到最后一个(优先级最低),使用@Order(),调整优先级。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007687.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号