44、基于 AOP 的错误处理,相当于异常拦截处理

news2024/11/18 14:02:48

基于 springboot 自动配置的 spring mvc 错误处理,就是演示项目报错后,跳转到自定义的错误页面

★ 两种错误处理方式

方式一: 基于Spring Boot自动配置的错误处理方式,只要通过属性文件即可配置错误处理行为。
提供自定义的错误页面即可。
上一篇:通过配置文件自定义错误页面

方式二: 使用@ResponseStatus、@ExceptionHandler、@ControllerAdvice等基于AOP的异常处理机制,
这是直接基于Spring MVC异常处理机制进行错误处理。

@RestControllerAdvice是什么:
@RestControllerAdvice是一个组合注解,由@ControllerAdvice、@ResponseBody组成,

而@ControllerAdvice 继承了@Component,因此@RestControllerAdvice本质上是个Component,
用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,

适用于所有使用@RequestMapping方法。

★ 基于Spring MVC AOP的错误处理机制

个人理解:相当于 异常拦截处理

它可以在程序出现错误时,增加自己的错误修复处理代码,
当然也可以最终根据错误码返回对应的视图页面或JSON响应。

——这种方式的功能其实比基于Spring Boot自动配置的错误处理要更强大、灵活,只不过比较麻烦一些而已。


- @ResponseStatus:可用于修饰指定异常类或异常处理方法。
                   就是将异常类或异常处理方法与错误码和错误信息对应起来。

- @ExceptionHandler:该注解修饰的方法相当于一个AfterThrowing Advice,它专门用于处理异常。
                该方法在处理异常时,就可以对异常进行一些自定义的修复。

- @ControllerAdvice(为错误生成视图页面)
- 或@RestControllerAdvice(生成JSON响应):该注解修饰的类相当于Aspect。

代码演示

回顾之前的错误处理:是返回一个动态错误页面
在这里插入图片描述

现在通过写一个异常处理类,拦截该异常并进行处理,返回对应的异常信息
(但是代码好像没明确表示能拦截什么异常,感觉是所有异常都拦截)

拦截到了抛出的异常,但是没有错误码,然后程序给分配一个500的错误码。

在这里插入图片描述

如图可以看到 基于 AOP 的错误处理生效了。不再是返回一个错误的动态页面,而是返回这个json数据响应。

和返回视图页面相比,这个@RestControllerAdvice修饰的异常处理类的作用就是我们可以在这个异常处理的类里面针对异常写一些处理的代码。

  • @ControllerAdvice(为错误生成视图页面用这个注解)
  • 或@RestControllerAdvice(生成JSON响应用这个注解):该注解修饰的类相当于Aspect。

图中这个 500 不知道是属于 HttpStatus.INTERNAL_SERVER_ERROR 生成的自定义错误码,还是原本就有的。
在这里插入图片描述

问题:

不明白为什么没有获取到原有的错误码,原本不就有500的状态码吗。暂时记录下。
在这里插入图片描述

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

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

相关文章

C++ : implicit instantiation of undefined template ‘std::vector<_******>‘

编译报错 implicit instantiation of undefined template ‘std::vector<_struFontMap>’ 需要 #include add vector class

Windows安装单节点Zookeeper

刚学习Dubbo&#xff0c;在Centos7中docker安装的zookeeper3.7.1。然后在启动provider时一直报错&#xff0c;用尽办法也没有解决。然后zookeeper相关的知识虽然以前学习过&#xff0c;但是已经忘记的差不多了。现在学习dubbo只能先降低版本使用了&#xff0c;之后再复习zookee…

第二篇: libyuv的编译

一、前言 DirectShow采集出来的视频, 采集格式(例如: mjepg)和我们需要的视频格式(i420)并不一致&#xff0c;因此需要解码 二、libyuv下载 git clone https://chromium.googlesource.com/external/libyuv 三、libjpeg-turbo下载 git clone https://github.com/libjpeg-tu…

北斗三代PPP-B2b解算非组合PPP分析

下面进行了北斗三代PPP-B2b非组合PPP-B2b定位的初步结果&#xff08;具体结果参考图片红色字体&#xff0c;不要看坐标轴标注或者标题&#xff09;&#xff1a; 参考文献&#xff1a; 1、https://blog.csdn.net/qq_40056060/article/details/119107531目录系列文章目录前言一、…

基于Spring Boot的高校二手物品售卖网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的高校二手物品售卖网站设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java sp…

你需要了解的有关计算机电源的所有信息

电源单元是将插座提供的电源转换为计算机机箱内许多部件的可用电源的硬件。 它将墙上插座的交流电转换为计算机组件所需的直流电。它还通过控制电压来调节过热&#xff0c;电压可能会根据电源自动或手动变化。 电源是一个关键部件&#xff0c;因为没有它&#xff0c;其他内部…

Deepin 图形化部署 Hadoop Single Node Cluster

Deepin 图形化部署 Hadoop Single Node Cluster 升级操作系统和软件 快捷键 ctrlaltt 打开控制台窗口 更新 apt 源 sudo apt update更新 系统和软件 sudo apt -y dist-upgrade升级后建议重启 开启ssh服务 打开资源管理器 进入系统盘 找到 etc 目录 在系统盘的 etc 目录上 右键…

OceanBase安全审计之传输加密

上一期我们讲了关于 OceanBase 安全审计的《身份鉴别》和《用户管理与访问控制》 两个部分&#xff0c;OceanBase 的安全机制介绍其支持传输加密&#xff0c;今天我们主要来实践一下如何配置传输加密以及验证是否真的加密。 作者&#xff1a;金长龙 爱可生测试工程师&#xff0…

Docker安装OpenWAF

Docker安装OpenWAF 官方GitHub地址 介绍 OpenWAF&#xff08;Web Application Firewall&#xff09;是一个开源的Web应用防火墙&#xff0c;用于保护Web应用程序免受各种网络攻击。它通过与Web服务器集成&#xff0c;监控和过滤对Web应用程序的流量&#xff0c;识别和阻止潜…

Vue中使用qrcode实现渲染二维码中间添加自定义logo-demo

效果 使用 import QRCode from qrcode; 具体生成过程 <template><div class"banner-login"><img :src"qrDataUrl" /></div> </template><script setup> import { ref, reactive } from vue; import QRCode from q…

Caffine和Guava的refreshAfterWrite的异同

背景: guava和caffine的refreshAfterWrite方法在用于本地缓存的场景是非常常用的&#xff0c;本文通过例子列举下caffine的refreshAfterWrite方法和guava的refreshAfterWrite的相同点和不同点 相同点/不同点&#xff1a; 以下都是使用keyXYZ作为例子 场景1&#xff1a;一开…

Linux网络编程:select函数的用法和原理

Linux网络编程&#xff1a;select函数的用法和原理 Linux上的select函数 select函数用于检测一组socket中是否有事件就绪.这里的事件为以下三类: 读事件就绪 在socket内核中,接收缓冲区中的字节数大于或者等于低水位标记SO_RCVLOWAT,此时调用rec或read函数可以无阻塞的读取该…

【Web UI自动化测试】Web UI自动化测试之框架篇(全网最全)

本文大纲截图&#xff1a; UnitTest框架&#xff1a; PyTest框架&#xff1a; 框架&#xff1a; 框架英文单词 framework&#xff0c;为解决一类事情的功能的集合。需要按照框架的规定&#xff08;套路&#xff09;去书写代码。 一、UnitTest框架介绍【文末分享自动化测试学…

报错:axios发送的所有请求都是404

axios发送的所有请求都是404 一、问题二、分析三、解决一、问题 对后台发送数据请求接口,在 Swagger 上是可以请求到的 但是通过 Ajax 发送请求就会报 404 Swagger 上调用如下 项目接口请求如下

深入MaxCompute -第十一弹 -QUALIFY

简介&#xff1a; MaxCompute支持QUALIFY语法过滤Window函数的结果&#xff0c;使得查询语句更简洁易理解。Window函数和QUALIFY语法之间的关系可以类比聚合函数GROUP BY语法和HAVING语法。 MaxCompute&#xff08;原ODPS&#xff09;是阿里云自主研发的具有业界领先水平的分…

【附安装包】3ds Max2023安装教程

软件下载 软件&#xff1a;3ds Max版本&#xff1a;2023语言&#xff1a;简体中文大小&#xff1a;6.85G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU3GHz 内存16G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.c…

【科普】干货!带你从0了解移动机器人(五) ( 如何选择控制器类型)

控制器是移动机器人&#xff08;AGV/AMR&#xff09;最主要的核心部件&#xff0c;是整个车体的“大脑”&#xff0c;关系到车体的可靠稳定、性能指标和安全性。它通常用于接收传感器模块采集的数据&#xff0c;并进行信息处理分析&#xff0c;从而下发各种运动指令的硬件。目前…

哪里可以找到优质的文章?

我认为中外科技内容过去主要是“信息差”&#xff0c;即人们可以直接从国外文章中摄取信息并直接实践&#xff0c;谁快谁赢。 而现在主要是“观点差”&#xff0c;国内科技相关的理论和评论文章的数量和质量都还比较弱。 所以&#xff0c;优质文章建议多找外文。 参考风险投资人…

django-项目

一、RESTful设计风格 基础概念 全称&#xff1a;Representational State Transfer 1.资源 网络上的一个实体&#xff0c;每个资源都有一个独一无二的URL与之对应&#xff1b;获取资源-直接访问URL即可 2.表现层 资源的表现形式 如HTML、xml、JPG、json等 3.状态转化 …