Java --- springboot2之异常处理

news2024/12/23 5:24:31

仅供参考

目录

一、异常处理

 二、异常处理自动配置原理 

 三、异常处理流程

四、定制错误处理逻辑 

 4.1、自定义错误页

 4.2、@ControllerAdvice+@ExceptionHandler处理全局异常

 4.3、@ResponseStatus+自定义异常

 4.4、Spring底层的异常,如 参数类型转换异常

 4.5、自定义实现 HandlerExceptionResolver 处理异常

一、异常处理

使用自己的错误处理页面

 二、异常处理自动配置原理 

ErrorMvcAutoConfiguration 自动配置异常处理规则

 容器中的组件:类型:DefaultErrorAttributes -> id:errorAttributes

DefaultErrorAttributes:定义错误页面中可以包含哪些数据。 

 

 

容器中的组件:类型:BasicErrorController --> id:basicErrorController(json+白页 适配响应)

 处理默认 /error 路径的请求;页面响应 new ModelAndView("error", model);

容器中有组件 View->id是error;(响应默认错误页)

 容器中放组件 BeanNameViewResolver(视图解析器);按照返回的视图名作为组件的id去容器中找View对象。

如果想要返回页面;就会找error视图【StaticView】。(默认是一个白页) 

 容器中的组件:类型:DefaultErrorViewResolver -> id:conventionErrorViewResolver

 如果发生错误,会以HTTP的状态码 作为视图页地址(viewName),找到真正的页error/404、5xx.html

 三、异常处理流程

执行目标方法,目标方法运行期间有任何异常都会被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  

四、定制错误处理逻辑 

 4.1、自定义错误页

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

 4.2、@ControllerAdvice+@ExceptionHandler处理全局异常

/**
 * 处理整个web controller异常
 */
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    //处理异常
    @ExceptionHandler({ArithmeticException.class,NullPointerException.class})
    public String handleArithException(Exception e){
        log.error("异常是={}",e);
        return "login";//视图地址
    }
}

 底层是 ExceptionHandlerExceptionResolver 支持的

 4.3、@ResponseStatus+自定义异常

@ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "用户数量过大")
public class UserTooManyException extends RuntimeException {
    public UserTooManyException(){

    }
    public UserTooManyException(String message){
        super(message);
    }
}

底层是 ResponseStatusExceptionResolver ,把responsestatus注解的信息底层调用 response.sendError(statusCode, resolvedReason);tomcat发送的/error

 4.4、Spring底层的异常,如 参数类型转换异常

DefaultHandlerExceptionResolver 处理框架底层的异常。response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage());

 4.5、自定义实现 HandlerExceptionResolver 处理异常

@Order(value = Ordered.HIGHEST_PRECEDENCE)//最高优先级生效
@Component
public class CustomerHandlerExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request,
                                         HttpServletResponse response,
                                         Object handler, Exception ex) {
        try {
            response.sendError(511,"自定义错误");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return new ModelAndView();
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/500747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7种常见网络并发模型介绍

概述 对于网络服务器后端开发,为满足不同并发场景的需要,一般来说,不外乎几种常见的并发模型,除了一些教学场景常用的单线程、多进程(线程)的服务器实现外,生产用的服务器,一般都会…

Linux多路IO复用:epoll

1. epoll epoll是为克服select、poll每次监听都需要在用户、内核空间反复拷贝,以及需要用户程序自己遍历发现有变化的文件描述符的缺点的多路IO复用技术。 epoll原理 创建内核空间的红黑树; 将需要监听的文件描述符上树; 内核监听红黑树上…

实验室设备管理系统

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 应用背景 为方便实验室进行设备管理,某大学拟开发实验室设备管理系统 来管理所有实验室里的各种设备。系统可实现管理员登录,查看现有的所有设备, 增加设备等功能。 开发环境 Mac OS PyCha…

JAVA:Springboot 装配数据库Hikari和Druid连接池

1、JDBC Java数据库连接(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。 JDBC API主要位于JDK中的java.sql包中(之后…

出现小红书点赞多粉丝少的情况,原因在哪里

刚开始运营自己账号的小伙伴们有时发现明明笔记点赞数量不少,但偏偏账号粉丝数量就是一直不怎么涨,像这样小红书点赞多粉丝少是怎么回事呢?今天就来说说,小红书该如何吸引用户关注。 一、小红书点赞多粉丝少是怎么回事 一般来说,…

从MIMIC学习组织自己的数据

从MIMIC学习组织自己的数据 相对于SEER数据库(我们得到的是几乎可以直接进行分析的数据),MIMIC 数据库在数据采集后虽然经过了一定的处理,但是保留了数据库原始的样貌,所以我们除了对MIMIC数据进行分析外,…

推荐算法之DeepFM

论文:DeepFM: A Factorization-Machine based Neural Network for CTR Prediction Github:https://github.com/ChenglongChen/tensorflow-DeepFM https://github.com/shenweichen/DeepCTR IJCAI2017 本文将深度神经网络dnn和因式分解机Factorization-M…

程序中各种异常报错,对于JVM调优记录

一:GC overhead limit exceeded 数据量过大:当应用程序处理大量的数据时,会占用大量的内存和计算资源。如果内存资源不足,则可能会在垃圾回收过程中出现 GC overhead limit exceeded 错误 程序代码有问题:如果 应用程…

Vmware虚拟机问题解决方案

Vmware虚拟机问题解决方案 1. 运行虚拟机系统蓝屏 可能的原因有两个: 1). 虚拟机所在磁盘的空间不足 ; -------> 清理磁盘空间 。 2). 操作系统版本高, 需要适配新版本的Vmware ; ------> 卸载Vmware15版本, 安装Vmware16版本 。 2. 卸载Vmware步骤 1). 卸载已经安…

商用密码产品认证中的随机数(一)

1 商密认证中的随机数介绍 如果说密钥的安全是密码产品的基石,那随机数的安全就是密钥安全的基石。密码产品设计和商用密码产品认证中,随机数的合规性也是需要重点关注的环节。 随机数的合规性主要包括: 随机数的来源合规。如果是自行设计的…

一点通路由模拟实验8

首先先设置hostA和hostB和hostC的ip 其次设置路由接口的各个ip 路由A 像这样的,再设置路由B 唯一要记住的是,时钟只要设置一个就行 就是clock rate 6400,之后开启路由:ip routing 然后就是查看路由表了(路由A&#…

Lecture 12(Preparation):Reinforcement Learning

目录 What is RL? (Three steps in ML) Policy Gradient Actor-Critic Reward Shaping No Reward: Learning from Demonstration It is challenging to label data in some tasks. 例如下围棋时,下一步下在哪个位置最好是不太好确定的,此时可以考虑…

无线传感器网络路由优化中的能量均衡LEACH改进算法(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 由于簇的规模和簇头选择对WSN总能耗影响较大:一方面,当簇的规模较小时,易导致WSN能量消耗不…

2021年NOC大赛编程马拉松赛道图形化中高组模拟卷,包含答案

目录 单选题: 判断题: 下载文档打印做题: 2021年NOC大赛编程马拉松赛道图形化中高组模拟卷 单选题: 1.雪球不小心误入了图灵学院旁边山林中的一个洞穴,一直都没有出来,禾木、桃子和小核桃打算进去找她,洞穴里漆黑一片,三人走着走着,不知怎么也走散了。如下图所示,…

加速开放计算产业化,OCTC五大原则瞄准需求痛点

回顾计算产业过去十余载的历程,开放计算始终是一个绕不开的核心焦点。 始于2011年Facebook发起的数据中心硬件开源项目--开放计算项目(简称:OCP),开放计算犹如星星之火,不仅迅速形成燎原之势,更…

windows安装GO语言环境

GO语言版本 Windows 平台和 Mac 平台推荐下载可执行文件版,Linux 平台下载压缩文件版。 版本:1.16.8 出现上面这个界面就说明已经安装好了 查看GO版本 可以打开终端窗口,输入go version命令,查看安装的 Go 版本 C:\Users\8617…

python数据可视化开发(5):webAPI百度地图轻量驾车路线规划距离与直线距离计算

webAPI百度地图轻量驾车路线规划规划 一、驾车路线规划说明1.接口说明API服务地址请求参数返回参数 二、python核心代码1.轻量路线规划代码封装2.批量读取起始点信息 三、直线距离计算 轻量级路线规划服务(又名DirectionLite API )是一套REST风格的Web服…

带你玩转数据结构-单链表(适合初学者的文章,讲解的很仔细哦)

前言: 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 C语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:讲解数据结构中链表的知识,;链表的分类,c语言实现单链…

界面控件Telerik UI for WinForms使用指南 - 数据绑定 填充(二)

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件,所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 Telerik UI for WinForms组件为可视化任何类…

使用【SD-WEBUI】插件生成同一张图包含多个人物:分区域的提示词

文章目录 (零)前言(一)潜变量成对(Latent Couple)(1.1)可自组LoRA(Composable LoRA) (二)分区扩散(Multi Diffusion&#…