当前全国疫情最新消息/西安网站seo公司

当前全国疫情最新消息,西安网站seo公司,个人网站做论坛还是博客好,济南做网站建设文章目录 1. 全局异常处理2. 项目异常处理方案2.1 异常分类2.2 异常解决方案2.3 异常解决方案具体实现 1. 全局异常处理 问题:当我们在SpingMVC代码中没有对异常进行处理时,三层架构的默认处理异常方案是将异常抛给上级调用者。也就是说Mapper层报错会将…

文章目录

  • 1. 全局异常处理
  • 2. 项目异常处理方案
    • 2.1 异常分类
    • 2.2 异常解决方案
    • 2.3 异常解决方案具体实现

1. 全局异常处理

  • 问题:当我们在SpingMVC代码中没有对异常进行处理时,三层架构的默认处理异常方案是将异常抛给上级调用者。也就是说Mapper层报错会将异常上抛给Service层,Service层报错会将异常上抛给Controller层,最终抛给框架之后会把各种各样的错误信息直接返回给前端,前端往往难以解析这些五花八门的异常。

  • 解决方案:SpingMVC提供了全局异常处理器,捕获不同的异常进行特定的处理。

    在这里插入图片描述

  • 实现方法:

    1. 上加@RestControllerAdvice注解,加上这个注解就代表我们定义了一个全局异常处理器,同时需要确保该类能够被Spring容器扫描到

      @RestControllerAdvice = @ControllerAdvice + @ResponseBody

      处理异常的方法返回值会转换为Json后再响应给前端

      在这里插入图片描述

    2. 在全局异常处理器当中,需要定义一个方法来捕获异常,在这个方法上需要加上注解@ExceptionHandler。通过@ExceptionHandler注解当中的value属性来指定我们要捕获的是哪一类型的异常。

      @RestControllerAdvice
      public class GlobalExceptionHandler {//处理异常@ExceptionHandler(Exception.class) //指定能够处理的异常类型public Result ex(Exception e){e.printStackTrace(); //打印堆栈中的异常信息//捕获到异常之后,响应一个标准的Resultreturn Result.error("对不起,操作失败,请联系管理员");}
      }
      

2. 项目异常处理方案

2.1 异常分类

  • 因为异常的种类有很多,如果每一个异常都对应一个@ExceptionHandler,那得写多少个方法来处理各自的异常,所以我们在处理异常之前,需要对异常进行一个分类:

    • 业务异常(BusinessException)

      • 规范的用户行为产生的异常

        • 用户在页面输入内容的时候未按照指定格式进行数据填写,如在年龄框输入的是字符串

          在这里插入图片描述

      • 不规范的用户行为操作产生的异常

        • 如用户故意传递错误数据

          在这里插入图片描述

    • 系统异常(SystemException)

      • 项目运行过程中可预计但无法避免的异常
        • 比如数据库或服务器宕机
    • 其他异常(Exception)

      • 编程人员未预期到的异常,如:用到的文件不存在

        在这里插入图片描述

    将异常分类以后,针对不同类型的异常,要提供具体的解决方案:

2.2 异常解决方案

  • 业务异常(BusinessException)
    • 发送对应消息传递给用户,提醒规范操作
      • 大家常见的就是提示用户名已存在或密码格式不正确等
  • 系统异常(SystemException)
    • 发送固定消息传递给用户,安抚用户
      • 系统繁忙,请稍后再试
      • 系统正在维护升级,请稍后再试
      • 系统出问题,请联系系统管理员等
    • 发送特定消息给运维人员,提醒维护
      • 可以发送短信、邮箱或者是公司内部通信软件
    • 记录日志
      • 发消息和记录日志对用户来说是不可见的,属于后台程序
  • 其他异常(Exception)
    • 发送固定消息传递给用户,安抚用户
    • 发送特定消息给编程人员,提醒维护(纳入预期范围内)
      • 一般是程序没有考虑全,比如未做非空校验等
    • 记录日志

2.3 异常解决方案具体实现

  1. 自定义异常类:添加code属性以区分异常来自哪个业务。

    //自定义异常处理器,用于封装异常信息,对异常进行分类
    @Data
    public class SystemException extends RuntimeException{private Integer code;public SystemException(Integer code, String message) {super(message);this.code = code;}public SystemException(Integer code, String message, Throwable cause) {super(message, cause);this.code = code;}
    }//自定义异常处理器,用于封装异常信息,对异常进行分类
    @Data
    public class BusinessException extends RuntimeException{private Integer code;public BusinessException(Integer code, String message) {super(message);this.code = code;}public BusinessException(Integer code, String message, Throwable cause) {super(message, cause);this.code = code;}
    }
    
    //状态码
    public class Code {public static final Integer SAVE_OK = 20011;public static final Integer DELETE_OK = 20021;public static final Integer UPDATE_OK = 20031;public static final Integer GET_OK = 20041;public static final Integer SAVE_ERR = 20010;public static final Integer DELETE_ERR = 20020;public static final Integer UPDATE_ERR = 20030;public static final Integer GET_ERR = 20040;public static final Integer SYSTEM_ERR = 50001;public static final Integer SYSTEM_TIMEOUT_ERR = 50002;public static final Integer SYSTEM_UNKNOW_ERR = 59999;public static final Integer BUSINESS_ERR = 60002;
    }
  2. 将其他异常换成自定义异常:

    public Book getById(Integer id) {//模拟业务异常,包装成自定义异常if(id == 1){throw new BusinessException(Code.BUSINESS_ERR,"业务异常,用户注意相关格式");}//模拟系统异常,将可能出现的异常进行包装,转换成自定义异常try{int i = 1/0;}catch (Exception e){throw new SystemException(Code.SYSTEM_TIMEOUT_ERR,"服务器访问超时,请重试!",e);}return bookDao.getById(id);
    }
    
  3. 处理器类中处理自定义异常:

    //@RestControllerAdvice用于标识当前类为REST风格对应的异常处理器
    @RestControllerAdvice
    public class ProjectExceptionAdvice {@ExceptionHandler(SystemException.class)public Result doSystemException(SystemException ex){//记录日志//发送消息给运维//发送邮件给开发人员,ex对象发送给开发人员return new Result(ex.getCode(),null,ex.getMessage());}@ExceptionHandler(BusinessException.class)public Result doBusinessException(BusinessException ex){return new Result(ex.getCode(),null,ex.getMessage());}//除了自定义的异常处理器,保留对Exception类型的异常处理,用于处理非预期的异常@ExceptionHandler(Exception.class)public Result doOtherException(Exception ex){//记录日志//发送消息给运维//发送邮件给开发人员,ex对象发送给开发人员return new Result(Code.SYSTEM_UNKNOW_ERR,null,"系统繁忙,请稍后再试!");}
    }
    

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

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

相关文章

blazemeter工具使用--用于自动生成jmeter脚本并进行性能测试

1、安装blazemeter(网上有很多详情的教程) 2、开始录制:设置号你的文件名称后开始录制 3、录制完成后保存为jmeter(jmx)文件 4、在jmeter中打开文件 5、添加一个后置处理器:查看结果树,后运行看看能否成功&#xf…

【C#实现手写Ollama服务交互,实现本地模型对话】

前言 C#手写Ollama服务交互,实现本地模型对话 最近使用C#调用OllamaSharpe库实现Ollama本地对话,然后思考着能否自己实现这个功能。经过一番查找,和查看OllamaSharpe源码发现确实可以。其实就是开启Ollama服务后,发送HTTP请求&a…

【C#学习笔记02】基本元素与数据类型

引言 深入了解C语言的基本元素、计算机存储器结构、常量与变量的概念以及数据类型。这些内容是C语言编程的基础,掌握它们对于编写高效、可靠的嵌入式程序至关重要。 1.C语言的基本元素 ​编程语言的发展离不开自然语言,所以编程语言的语法和词汇也是由…

ESP8266TCP客户端(单连接TCP Client)

单连接TCP Client 电脑作为服务器,8266作为客户端 1.配置WiFi模式 ATCWMODE3 //softAPstation mode 相应:ok 2.连接路由器 ATCWJAP“SSID”,“password” //SSID就是wifi的名字, password WIFI密码 响应&#xff…

VSCode 2025最新前端开发必备插件推荐汇总(提效指南)

🌟前言: 如果你是一名前端开发工程师,合适的开发工具能大大提高工作效率。Visual Studio Code (VSCode) 凭借其轻量级、高扩展性的特点,已成为众多前端开发者在win系电脑的首选IDE。 名人说:博观而约取,厚积而薄发。—…

Java学习--Redis

官网:https://redis.io 中文网:Redis中文网 Redis安装包分为 Windows 版和 Linux 版: Windows版下载地址:Releases microsoftarchive/redis GitHub Linux版下载地址: Index of /releases/ 一、Redis简介 Redis是…

matlab慕课学习3.2+3.3

于20250310 3.2用if语句实现选择结构 3.2.1什么是选择结构 用if 语句和switch语句可实现选择结构 3.2.2单分支if语句 if 条件语句组 %可以是一条也可是多条end 当条件为标量,非0表成立,0表示不成立。 当条件为矩阵时,矩阵非空&#xff…

【Java学习】包装类

面向对象系列九 包装类变量 一、装箱 1.实例化包装对象 2.静态缓存池 3.写法 二、拆箱 包装类变量 每个基本数据类型都有对应的基本类型的包装类变量,将基本数据类型通过对应的包装类对象载入着进入到类与对象面向对象体系 一、装箱 Integer.valueOf(int) —…

【第22节】C++设计模式(行为模式)-Iterator(迭代器)模式

一、问题背景 Iterator 模式是设计模式中最为常见和实用的模式之一。它的核心思想是将对聚合对象的遍历操作封装到一个独立的类中,从而避免暴露聚合对象的内部表示。通过 Iterator 模式,我们可以实现对聚合对象的统一遍历接口,而不需要关心聚…

基于windows的MySQL安装(2025最新,小白可用)

目录 一,下载官网地址(及版本选择): 二,以安装程序的方式安装MySQL 1,安装过程 2,用客户端使用MySQL 3,配置环境变量在windows命令行界面使用mysql 下次开机后手动启用服务 三…

4个 Vue 路由实现的过程

大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员👨🏻‍💻,关注我,科技未来或许我能帮到你! Vue 路由相信朋友们用的都很熟了,但是你知道 Vue 路由…

数学之快速幂-数的幂次

题目描述 给定三个正整数 N,M,P,求 输入描述 第 1 行为一个整数 T,表示测试数据数量。 接下来的 T 行每行包含三个正整数 N,M,P。 输出描述 输出共 T 行,每行包含一个整数,表示答案。 输入输出样例 示例 1 输入 3 2 3 7 4…

【JavaEE】多线程进阶(2)

【JavaEE】多线程进阶(2) 一、JUC(java.util.concurrent) 的常⻅类1.1 Callable 接⼝1.2 ReentrantLock1.3 原子类原子类的特性:常见原子类:原子类的实例: 1.4 线程池1.5 信号量 Semaphore代码实例 1.6 CountDownLatch…

[漏洞篇]XSS漏洞详解

[漏洞篇]XSS漏洞 一、 介绍 概念 XSS:通过JS达到攻击效果 XSS全称跨站脚本(Cross Site Scripting),为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以…

越早越好!8 个反直觉的金钱真相|金钱心理学

很多人都追求财富自由,但成功的人少之又少。 这可能是因为,人们往往忽略了一些金钱的真相和常识。 01 金钱常识 & 真相 为了构建健康的金钱观,我读了一本有点反直觉,有点像鸡汤,但都是财富真相的书。 来自 Morg…

Spring Boot/Spring Cloud 整合 ELK(Elasticsearch、Logstash、Kibana)详细避坑指南

我们在开发中经常会写日志,所以需要有个日志可视化界面管理,使用ELK可以实现高效集中化的日志管理与分析,提升性能稳定性,满足安全合规要求,支持开发运维工作。 下述是我在搭建ELK时遇到的许许多多的坑,希望…

AI编程: 一个案例对比CPU和GPU在深度学习方面的性能差异

背景 字节跳动正式发布中国首个AI原生集成开发环境工具(AI IDE)——AI编程工具Trae国内版。 该工具模型搭载doubao-1.5-pro,支持切换满血版DeepSeek R1&V3, 可以帮助各阶段开发者与AI流畅协作,更快、更高质量地完…

手机屏幕摔不显示了,如何用其他屏幕临时显示,用来导出资料或者清理手机

首先准备一个拓展坞 然后 插入一个外接的U盘 插入鼠标 插入有数字小键盘区的键盘 然后准备一根高清线,一端链接电脑显示器,一端插入拓展坞 把拓展坞的连接线,插入手机充电口(可能会需要转接头) 然后确保手机开机 按下键盘…

第八届蓝桥杯单片机省赛

什么?你把最近几届省赛真题做完已经无题可做了,那不妨来看看老古董第八届省赛的题目吧! 附件:第八届蓝桥杯单片机省赛 一、数码管 1.页面流转 以上的页面流转功能可以用下图总结: #mermaid-svg-38fdQpdydbMy5CyP {fo…

win10电脑鼠标速度突然变的很慢?

电脑鼠标突然变很慢,杀毒检测后没问题,鼠标设置也没变,最后发现可能是误触鼠标的“DPI”调节键。 DPI调节键在鼠标滚轮下方,再次点击即可恢复正常鼠标速度。 如果有和-的按键,速度变快,-速度变慢。 图源&…