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(),调整优先级。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值