当前位置: 首页 > news >正文

【Spring Boot】统一异常处理

目录

  • 统一异常处理
    • 一. 概念
    • 二. 全局异常处理
    • 三. 处理特定异常

统一异常处理

一. 概念

其实统一异常是运用了AOP(对某一类事情的集中处理)的思维,简单概括就是在我们进行前后端数据交互的时候,抛出的任何的异常都能够自动捕获然后抛出,不用程序员在敲代码时格外关注try catch语句。

其实统一异常处理非常简单,在实现时要加入类注解@ControllerAdvice(这是一个表示控制通知的注解,在接下来的统一异常处理也要运用到),并且有一点与统一数据返回不同的是,统一异常处理需要加上类注解@ResponseBody来确认返回的数据类型,然后在类中要进行捕获异常的方法上加上注解@ExceptionHandle即可。

二. 全局异常处理

处理全局异常代码如下:

import com.example.demo.model.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ControllerAdvice
@ResponseBodypublic class ErrorAdvice {/*** 全局异常处理*/@ExceptionHandlerpublic Object handler(Exception e) {return Result.fail(e.getMessage());}}

这样程序抛出异常的时候,就会被该异常处理方法所捕获,并且返回统一异常处理的结果(JSON格式)!

三. 处理特定异常

处理特定异常代码如下:

import com.example.demo.model.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ResponseBody
@ControllerAdvicepublic class ErrorAdvice {@ExceptionHandlerpublic Object handler(Exception e) {return Result.fail(e.getMessage());}@ExceptionHandlerpublic Object handler(NullPointerException e) {return Result.fail("发⽣NullPointerException:"+e.getMessage());}@ExceptionHandlerpublic Object handler(ArithmeticException e) {return Result.fail("发⽣ArithmeticException:"+e.getMessage());}}

当有多个异常通知时,匹配顺序为当前类及其⼦类向上依次匹配

进行统一异常处理的目的就是在异常发生时,尽可能地减少破坏,妥善处理,而不去影响其他部分程序的运行

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从零到一:构建股票预测模型的Python实战教程
  • Redis-Redis可视化工具Redis Insight下载及安装
  • Android TV跨平台开发心得
  • DataExcelServer局域网文件共享服务器增加两个函数
  • 【Android高级UI】计算不规则图形面积
  • 【人工智能】-- 法律与伦理
  • 对数据采集、数据存储和数据处理流程
  • 字节码编程javassist之增加异常捕获
  • 如何安全隐藏IP地址,防止网络攻击?
  • Open3D 从体素网格构建八叉树
  • 权力之望怎么注册账号创建角色 权利之网角色账号注册教程
  • vue配置sql规则
  • Zabbix自动发现
  • 白骑士的C++教学基础篇 1.1 C++简介
  • 非参数检测5——双输入检测系统
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [译] 怎样写一个基础的编译器
  • Effective Java 笔记(一)
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • passportjs 源码分析
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • sessionStorage和localStorage
  • SpingCloudBus整合RabbitMQ
  • 阿里云应用高可用服务公测发布
  • 多线程事务回滚
  • 坑!为什么View.startAnimation不起作用?
  • 通过git安装npm私有模块
  • 我从编程教室毕业
  • 学习笔记TF060:图像语音结合,看图说话
  • 用quicker-worker.js轻松跑一个大数据遍历
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ###STL(标准模板库)
  • #pragma pack(1)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $.each()与$(selector).each()
  • (6)设计一个TimeMap
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)甲方乙方——赵民谈找工作
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .htaccess 强制https 单独排除某个目录
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net Core和.Net Standard直观理解
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net的socket示例
  • .net中的Queue和Stack
  • /tmp目录下出现system-private文件夹解决方法
  • :“Failed to access IIS metabase”解决方法
  • @PreAuthorize注解
  • @property括号内属性讲解
  • @Transactional事务注解内含乾坤?
  • [ACM] hdu 1201 18岁生日