【SpringBoot】SpringBoot中的异常处理和异常跳转页面

目录

1.异常跳转页面

[1.1 概念](#1.1 概念)

[1.2 使用](#1.2 使用)

2.异常处理

[2.1 概念](#2.1 概念)

[2.2 通过@ExceptionHandler 注解处理异常(局部处理)](#2.2 通过@ExceptionHandler 注解处理异常(局部处理))

[2.3 通过@ControllerAdvice 注解处理异常(全局处理)](#2.3 通过@ControllerAdvice 注解处理异常(全局处理))

[2.4 通过 SimpleMappingExceptionResolver 对象处理异常(全局)](#2.4 通过 SimpleMappingExceptionResolver 对象处理异常(全局))

[2.5 通过自定义 HandlerExceptionResolver 对象处理异常(全局)](#2.5 通过自定义 HandlerExceptionResolver 对象处理异常(全局))


1.异常跳转页面

1.1 概念

  • SpringBoot中支持给异常提供跳转页面,避免直接将异常信息输出给客户端。
  • 这些页面的使用规则springboot已经定好了,如果想要使用原生的按照它的规则来即可。

1.2 使用

(1)首先在在templates目录下创建子目录error,并在error目录下创建异常状态码命名的模板。通常是 404.html,500.html, 4xx.html(x为通配符),5xx.html(x为通配符)。

(2)如果出现了上面命名的状态码,则跳转该给模版页面中。4xx.html,5xx.html,这两个表示只要出现了已4或者5开头的状态码错误就跳转到该页面。

(3)还可以在templates目录下直接创建error.html,如果没有对应的异常页面,则全部跳转到该error.html。

注意:要严格按照规定的方式命名,因为底层已经给我们写好了相应的单元方法跳转页面。

如图,写一个404异常页面,启动服务器,在地址栏中输入一个找不到的页面就会直接跳转到该页面。

2.异常处理

2.1 概念

在 Spring Boot 项目中除了设置异常提示页面,还可以通过注解实现异常错误的处理。 常见方式如下:

  1. 在控制器类中添加一个方法,结合@ExceptionHandler。但是只能对当前控制器中方法出 现异常进行解决。
  2. 新建全局异常类,通过@ControllerAdvice 结合@ExceptionHandler。当全局异常处理和 局部处理同时存在时,局部生效(就近原则)
  3. 配置类的方式实现。

2.2 通过@ExceptionHandler 注解处理异常(局部处理)

如下图是该注解的使用,在控制器类中写异常处理方法,解决该类中出现异常。

地址栏访问后,页面发生跳转,出现的空指针异常被处理了。服务器后台不会报错

2.3 通过@ControllerAdvice 注解处理异常(全局处理)

配置异常处理类如下。

同样对下面的单元方法进行访问

出现异常后,会进到异常处理类进行处理,处理后跳转页面

2.4 通过 SimpleMappingExceptionResolver 对象处理异常(全局)

如图所示,创建配置类,添加出现的异常类型,和跳转的资源页面。

对比springmvc的配置方式如下,其实上买的那种方式也就是springmvc的配置方法而已。

2.5 通过自定义 HandlerExceptionResolver 对象处理异常(全局)

自定义Springmvc的异常处理bean,该类是我们面向HandlerExceptionResolver 接口写实现,配置为Bean后,DispatherServlet底层会面向接口调用我们写的这个实现。

配置之后,同样访问上面的单元方法,会得到一样的结果。

注:SimpleMappingExceptionResolver也是实现了HandlerExceptionResolver 接口是官方已经写好了的,我们直接使用即可,但上面这个是我们自定义的。

相关推荐
桃西西呀2 分钟前
Spring AI Alibaba 之九:我让 Agent 接着上一轮往下聊,它却只还给我一条消息,多轮记忆到底藏在哪
人工智能·spring·llm
企业数字化笔记3 分钟前
多租户系统从哪里开始设计?租户身份、数据隔离、权限与套餐的整体方案
java·spring boot·后端·junit
tiger从容淡定是人生9 分钟前
从 Gemini 的任务示例出发:AI 能否从知识中推导工作流?
java·人工智能·aigc·知识图谱·创业创新·零知识证明
Nebula_g14 分钟前
JavaSE高级:动态代理
java·开发语言·算法·javase
高级程序源20 分钟前
springboot校园外卖平台13676-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·tomcat·maven·课程设计
怦然丶心动29 分钟前
用 Java 把干支历法算清楚:从节气切年到可读摘要
java·算法·vue·独立开发·spring boot / spring
杨运交34 分钟前
[077][消息模块]基于 Redis List 的轻量级消息队列框架设计解析
spring boot
青春逝如流水34 分钟前
Java 线程与操作系统、硬件的关系:状态、映射与差异
java·开发语言·多线程·ai文章
深入云栈35 分钟前
Netty 4.2.x 源码深度解析 (十八):ChannelOutboundBuffer 写缓冲区 —— 发送队列与流量控制
java·后端·架构
我是人✓39 分钟前
Java核心术语与内存机制深度解析
java