SpringBoot-异常处理
1、错误处理
1.1、 默认规则
- 默认情况下,Spring Boot提供/error处理所有错误的映射
- 对于机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息,对于浏览器客户端,响应一个“ whitelabel”错误视图,以HTML格式呈现相同的数据
- 要对其进行自定义,添加View解析为error
- 要完全替换默认行为,可以实现 ErrorController 并注册该类型的Bean定义,或添加ErrorAttributes类型的组件以使用现有机制但替换其内容。
- error/下的4xx,5xx页面会被自动解析;
1.2、 定制错误处理逻辑
自定义错误页
- error/404.html error/5xx.html; 有精确的错误状态码页面就匹配精确,没有就找 4xx.html;如果都没有就触发白页
@ControllerAdvice+@ExceptionHandler处理全局异常;底层是 ExceptionHandlerExceptionResolver 支持的
@ResponseStatus+自定义异常 ;底层是 ponseStatusExceptionResolver ,把responsestatus注解的信息底层调用 response.sendError(statusCode, resolvedReason);tomcat发送的/error
pring底层的异常,如 参数类型转换异常;DefaultHandlerExceptionResolver 处理框架底层的异常。
- response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage());
- 自定义实现 HandlerExceptionResolver 处理异常;可以作为默认的全局异常处理规则
ErrorViewResolver 实现自定义处理异常
- response.sendError ,error请求会转给controller
- 异常没有任何人能处理,tomcat底层 response.sendError,error请求就会转给controller
- basicErrorController 要去的页面地址是 ErrorViewResolver
1.3、 异常处理自动配置原理
ErrorMvcAutoConfiguration 自动配置异常处理规则
容器中的组件:类型:DefaultErrorAttributes -> id:errorAttributes
public class DefaultErrorAttributes implements ErrorAttributes, HandlerExceptionResolver
**DefaultErrorAttributes:**定义错误页面中可以包含哪些数据。
容器中的组件:类型:BasicErrorController --> id:basicErrorController(json+白页 适配响应)
- 处理默认 /error 路径的请求;页面响应 new ModelAndView(“error”, model);
- 容器中有组件 View->id是error(响应默认错误页)
- 容器中放组件 BeanNameViewResolver(视图解析器);按照返回的视图名作为组件的id去容器中找View对象
容器中的组件:类型:DefaultErrorViewResolver -> id:conventionErrorViewResolver
- 如果发生错误,会以HTTP的状态码 作为视图页地址(viewName),找到真正的页面
- error/404、5xx.html
如果想要返回页面;就会找error视图(StaticView), (默认是一个白页)
1.4、 异常处理步骤流程
- 执行目标方法,目标方法运行期间有任何异常都会被catch、而且标志当前请求结束;并且用 dispatchException
- 进入视图解析流程(页面渲染)
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException) - mv = processHandlerException->处理handler发生的异常,处理完成返回ModelAndView
- 遍历所有的 handlerExceptionResolvers,看谁处理当前异常(HandlerExceptionResolver处理器异常解析器)
- 系统默认的 异常解析器
DefaultErrorAttributes先来处理异常。把异常信息保存到rrequest域,并且返回null
默认不能处理异常,所以异常会被抛出
- 如果没有任何人能处理最终底层就会发送 /error 请求。会被底层的BasicErrorController处理
- 解析错误视图,遍历所有的 ErrorViewResolver 看谁能解析。
- 默认的 DefaultErrorViewResolver ,作用是把响应状态码作为错误页的地址,error/500.html
- 模板引擎最终响应这个页面 error/500.html
SpringBoot-异常处理相关推荐
- SpringBoot异常处理的简单理解
Springboot异常处理: 1.局部异常处理: 直接对Controller类进行操作 2.全局统一异常处理 Springboot两种全局异常统一处理的方式: A.使用继承BasicErrorCon ...
- SpringBoot异常处理ErrorController详解
文章目录 一.背景 二.SpringBoot的默认异常处理BasicErrorController 三.自定义错误异常 写在前面: 我是「境里婆娑」.我还是从前那个少年,没有一丝丝改变,时间只不过是考 ...
- SpringBoot异常处理以及对数据正确性的检查
SpringBoot异常处理以及对数据正确性的检查 一个项目中的异常处理是非常沉重的话题,每次做项目中如果异常处理的不好,轻微一点的会让测试人员找到你的问题,严重点的会把报错的日志打印给客户展示,这可 ...
- springboot异常处理方式
springboot异常处理方式 参考文章: (1)springboot异常处理方式 (2)https://www.cnblogs.com/whalesea/p/11384397.html 备忘一下.
- Springboot异常处理errorController
Springboot异常处理errorController 参考文章: (1)Springboot异常处理errorController (2)https://www.cnblogs.com/jiah ...
- SpringBoot异常处理
文章目录 springboot处理异常的5种方式 1.自定义错误页面 2.@ExceptionHandle 注解处理异常 3.@ControllerAdvice+@ExceptionHandler 注 ...
- 【springboot异常处理】用异常信息枚举类处理异常,使用自定义异常封装异常对象,返回统一异常处理结果
1.目录: 异常信息枚举类 自定义异常类 自定义响应数据 全局异常处理类 测试 总结 异常信息枚举类 由于在业务中,有很多异常,针对不同的业务,可能给出的提示信息不同,所以为了方便项目异常信息管理,我 ...
- SpringBoot异常处理-自定义HandlerExceptionResolver
需要再全局异常处理类中实现HandlerExceptionResolver 接口 package com.learn.exception;import javax.servlet.http.HttpS ...
- SpringBoot异常处理-SimpleMappingExceptionResolver
在全局异常类中添加一个方法完成异常的同一处理 package com.learn.exception;import java.util.Properties;import org.springfram ...
- SpringBoot异常处理-@ControlleAdvice
@ControllerAdvice+@ExceptionHandler 注解处理异常 需要创建一个能够处理异常的全局异常类.在该类上需要添加@ControllerAdvice 注解 package c ...
最新文章
- 公共交通伸展城市智慧
- gsonformat插件_收藏非常有用的IDEA插件,没用过这些IDEA插件?怪不得写代码头疼
- mysql抖动可能的原因,12 | 为什么我的MySQL会“抖”一下?
- nginx第三方模块---nginx-sticky-module的使用(基于cookie的会话保持)
- C++ Regsvr32订购具体解释
- 知道ip地址如何进入电脑_如何防止局域网电脑IP地址冲突
- Windows不需要输密码,直接登录显示桌面
- 12、阈值分割基础理论
- 最新Erphpdown v13.11modown8.02主题破jie版去授权无域名限制版本
- 操作系统-信号量机制的一些习题
- Flutter跑马灯Marquee
- 免费听歌下载歌曲的几个网站
- NOJ1060接苹果——DP
- java 逃逸分析_JVM之逃逸分析
- mysql启动失败LSB_mysql启动报错:Failed to start LSB: start and stop MySQL
- java使用poi实现excel保护工作表实例代码(支持.xls和.xlsx)
- C# SolidWorks 二次开发 API --- 提升exe执行效率接近DLL
- 前端面试题-小米二面
- 线性判别函数:感知器、松弛算法、Ho-Kashyap算法
- [还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了