【SpringMVC】| 控制器异常处理机制及实现流程

news2025/1/13 15:37:41

MVC目录

  • 一. 🦁 前言
  • 二. 🦁 控制器异常处理
    • Ⅰ. 单个控制器异常处理
    • Ⅱ. 全局异常处理
    • Ⅲ. 自定义异常处理
  • 三. 🦁 最后

一. 🦁 前言

咱们来探索一下控制器异常处理流程,以及如何来实现它。

二. 🦁 控制器异常处理

在系统当中, Dao、Service、Controller层代码出现都可能抛出异常。如果哪里产生异常就在哪里处理,则会降低开发效率。所以一

般情况下我们会让异常向上抛出,最终到达DispatcherServlet中,此时SpringMVC提供了异常处理器进行异常处理,这样可以提高开发效率。

image-20230415103926364

Ⅰ. 单个控制器异常处理

在控制器中定义异常处理方法只能处理该控制器类的异常。

image-20230415103645304

@Controller
public class MyController {
  @RequestMapping("/t1")
  public String t1(){
    String str = null;
    //     str.length();
    //     int flag = 1/0;
    int[] arr = new int[1];
    arr[2] = 10;
    return "index";
   }

  /**
   * 异常处理方法
   * @param ex 异常对象
   * @param model 模型对象
   * @return
   */
  // 添加@ExceptionHandler,表示该方法是处理异常的方法,属性为处理的异常类
  @ExceptionHandler({java.lang.NullPointerException.class,java.lang.ArithmeticException.class})
  public String exceptionHandle1(Exception ex, Model model){
    // 向模型中添加异常对象
    model.addAttribute("msg",ex);
    // 跳转到异常页面
    return "error";
   }

  // 方法一不能处理的异常交给方法二处理
  @ExceptionHandler(java.lang.Exception.class)
  public String exceptionHandle2(Exception ex, Model model){
    model.addAttribute("msg",ex);
    return "error2";
   }
}

Ⅱ. 全局异常处理

要想处理所有控制器的异常,需要定义全局异常处理类。

image-20230415110437556

@ControllerAdvice					// 全局异常处理器类,需要添加@ControllerAdvice
public class GlobalExceptionHandler {
  /**
   * 异常处理方法
   *
   * @param ex   异常对象
   * @param model 模型对象
   * @return
   */
  // 添加@ExceptionHandler,表示该方法是处理异常的方法,属性为处理的异常类
  @ExceptionHandler({java.lang.NullPointerException.class, java.lang.ArithmeticException.class})
  public String exceptionHandle1(Exception ex, Model model) {
    // 向模型中添加异常对象
    model.addAttribute("msg", ex);
    // 跳转到异常页面
    return "error";
   }


  // 方法一不能处理的异常交给方法二处理
  @ExceptionHandler(java.lang.Exception.class)
  public String exceptionHandle2(Exception ex, Model model) {
    model.addAttribute("msg", ex);
    return "error2";
   }
}

Ⅲ. 自定义异常处理

image-20230415111013340

// 自定义异常处理器实现HandlerExceptionResolver接口,并放入Spring容器中
@Component
public class MyExceptionHandler implements HandlerExceptionResolver {
  @Override
  public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
    ModelAndView modelAndView = new ModelAndView();
    if (e instanceof NullPointerException) {
      modelAndView.setViewName("error");
     } else {
      modelAndView.setViewName("error2");
     }
    modelAndView.addObject("msg", e);
    return modelAndView;
   }
}

三. 🦁 最后

控制器异常处理,您学会了么,咱们下期见!!!

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

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

相关文章

烈日炎炎的夏天骑行,怎么预防中暑及中暑后怎么处理?

随着天气的逐渐炎热,夏季骑行逐渐成为了人们喜爱的一项运动。但是,在享受骑行乐趣的同时,我们也要时刻关注身体健康,预防中暑等意外情况的发生。下面,本文将从多个角度为大家讲解夏季骑行中暑的预防和处理方法。 一、选…

音频环回实验

音频环回实验 一、WM8978简介 WM8978是一个低功耗、高质量的立体声多媒体数字信号编译码器,它结合了一个高质量的立体声音DAC和ADC,带有灵活的音频线输入、麦克风输入和音频输出处理 WM8978内部有58个寄存器。每一个寄存器的地址位为7位,数…

SpringCloud基础知识

1、什么是SpringCloud SpringCloud分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体(微服务全家桶)。 查看官网:https://spring.io/ Spring Cloud本身不是新的框架,是一个全家桶式的技术栈&…

销售管理系统哪种好?

一、如何选择销售管理系统 销售管理软件其实就是我们常说的CRM软件,在激烈的市场竞争下,传统的销售管理模式不能满足有效跟进和及时维护客户的需求,在挖掘新客户和增强客户忠诚度方面也出现了一定弊端,因此销售管理软件应运而生&…

作者等级与权益说明

「创收计划」3.0上线,全面助力资源优质创作者 创:代表创作者收:代表收获 截止目前,文库资源频道已开放20细分领域,每个领域又进行详细的细分,在每个细分的品类上,我们已经收获了来自广大创作者…

基于AT89C51单片机的简易计算器的设计与仿真

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87755299?spm1001.2014.3001.5503 源码获取 本设计是以单片机AT89C51为核心的简易计算器设计,要通过芯片AT89C51实现计算器程序运行来完成加、减、乘…

python--读取TRMM-3B43月平均降水绘制气候态空间分布图(陆地区域做掩膜)

python–读取TRMM-3B43月平均降水绘制气候态空间分布图(陆地区域做掩膜) 成果展示 TRMM降水数据介绍 热带降雨测量任务(The Tropical Rainfall Measuring Mission,TRMM)是美国国家航空航天局(NASA)和日本国家太空发展署(National Space Dev…

刚转岗做项目经理,无从下手,怎么办?

01 背景 最近在知乎平台看到一个问题是这么说的: 或许很多人都不是从工作开始就是项目专员再到项目经理这里一步一步过来,而是从其他岗位比如售前、销售、产品经理、程序员等转到项目经理岗位的。 那么对于这些人来说,做项目经理会有什么问…

第一次找实习, 什么项目可以给自己加分(笔记)

什么样的项目能简历加分、对找工作有帮助 基本特征: 一个特征是“硬核基础软件”,另一个为很实用的APP。 硬核基础软件 独立实现一个操作系统的kerne内核(操作系统的内部引擎) 北美计算机名校会让学生用一个学期的时间实现一个…

冒险岛私人服务器详细架设教程

冒险岛Online   《冒险岛Online》是由韩国WIZET和NEXON制作开发的一款2D横版卷轴网络游戏,于2004年7月24日在中国大陆正式上线,由盛大游戏负责运营。   故事以被“黑暗力量”不断入侵,因而进入了“浑沌期”的世界为背景,勇士们…

微服务知识3

Gateway核心概念 路由(route) 网关中最基础的部分,路由信息包括一个ID,一个目的URI,一组谓词工厂,一组Filter组成。如果谓词为真,则说明请求的URL和配置的路由匹配 谓词(preducates) 即java.util.function.Predica…

atbf中imu数据的读取与处理方式

一、说明 本文为作者在阅读atbf源码的过程中,对atbf中imu数据的读取和处理方式的个人理解,可能存在不对之处,意在抛砖引玉,请各位老师多多指正; 二、数据读取流程图 1、target NEUTRONRCF435SE 不同的target所定义…

C++中的queue与priority_queue

文章目录 queuequeue的介绍queue的使用 priority_queuepriority_queue介绍priority_queue使用 queue queue的介绍 队列是一种容器适配器,专门用于上下文先进先出的操作中。队列的特性是先进先出,从容器的一端插入,另一端提取元素。   队列…

Java17的性能优势是否足以让它取代Java8?

随着时间的推移,Java不断地进行更新和发展,以满足不断变化的业务需求。目前,Java8已经成为了一个非常成熟的版本,并且在各个领域广泛应用。但是,Java17也早已发布,并且是Java 11以来又一个LTS(长期支持)版本…

vmware虚拟机安装k8s(之前已经安装过docker)

1、安装开始 先执行:curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add 再执行更改源:echo "deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" >> /etc/apt/sources.list …

单向链表——C语言实现

哈喽,大家好,今天我们学习的是数据结构里的链表,这里主要讲的是不带哨兵卫头节点的单向链表,下篇将会继续带大家学习双向链表。 目录 1.链表的概念 2.单向链表接口的实现 2.1动态申请一个节点 2.2单链表打印 2.3单链表尾插 …

强大的editplus 5.7

EditPlus是一款由韩国 Sangil Kim (ES-Computing)出品的小巧但是功能强大的可处理文本、HTML和程序语言的Windows编辑器,你甚至可以通过设置用户工具将其作为C,Java,Php等等语言的一个简单的IDE。 EditPlus(文字编辑器&#xff0…

Java学习-MySQL-数据库的设计

Java学习-MySQL-数据库的设计 为什么需要设计数据库 当数据库比较复杂的时候,需要设计数据库。 糟糕的数据库设计: 数据冗余,浪费空间;数据库插入和删除很麻烦,可能导致异常(屏蔽使用物理外键&#xff0…

机器学习实战教程(十三):集成学习

简介 集成学习是一种机器学习方法,它旨在通过将多个单独的学习器(称为基分类器或基学习器)的预测结果进行组合,来提高整体的预测准确率。 集成学习可以看作是一种“多个人一起合作做事”的方法。每个基分类器都是独立的学习器&a…

【恭喜宿主:你的神装Xpath到手】——07全栈开发——如桃花来

目录索引 什么是XML:文档演示: XML的节点关系:1.父节点:2. 子节点:3. 同胞节点:4. 先辈节点:5. 后代节点: Xpath:1. 相关语法:*最常用的路径表达式&#xff1…