当SpringMVC的Controller出现异常(Exception)时,如何做到及时处理(跳转错误页面)...

2023-05-16

当SpringMVC的Controller出现异常时,如何做到及时处理呢?对用于来说比较友好的处理方法就是当出现不同的异常时给予不同的错误提示页面。

在代码实现上,这里借助@ControllerAdvice@ExceptionHandler来实现。

首先介绍实现过程,然后再对上述标签做出解释

一、实现过程


/** 通过下面的代码实现,所有其他Controller中使用了@RequestMapping注解的方法,在运行过程中抛出异常时就会得到相应的处理。 */
@ControllerAdvice
public class ValidateMsgConfig {
    private final Log log = LogFactory.getLog(this.getClass());
    
    /** 当出现业务异常时,将自定义异常类CustomError的内容返回并显示到页面上 */
    @ExceptionHandler(BusinessException.class)
    @ResponseBody
    public CustomError handleBusinessException(BusinessException e) {
        log.error(e.getMessage(), e);
        return new CustomError();
    }

    /** 当出现其他异常时,将跳转到自定义的错误页面 */
    @ExceptionHandler(OtherException.class)
    public String handleException(Exception e) {
        log.error(e.getMessage(), e);
        return "/common/index/500.html";
    }
}  

二、标签解释

@ControllerAdvice

这个注解新增于Spring3.2版本中。

首先这个注解只能使用在类、接口或枚举类型之上(因为它的@Target设置成了ElementType.TYPE),并且使用了这个注解的类也就成了Spring容器中的一个Bean(因为这个主机拥有@Component注解的功能)。

它的作用就是协助其他普通Controller完成一些辅助功能。比较典型的用途就是在使用了@ExceptionHandler/@InitBinder/@ModelAttribute和@RequestMapping注解的方法上起到一定的作用,具体起到什么作用呢?其实就是@ExceptionHandler/@InitBinder/@ModelAttribute这3个注解起到的作用(@RequestMapping都比较熟悉,就不讲了),下面会说到@ExceptionHandler、@InitBinder和@ModelAttribute的作用。

在这个注解中可以使用basePackages、value、basePackageClasses这样的selector对所要作用的Controller限定范围,如果不加这些selector,则@ControllerAdvice将作用于所有的Controller之上。

@ExceptionHandler

这个注解在String3.0中新增加,只能使用在方法上。作用是:通过指定具体的异常处理类或异常处理方法进行异常处理。

通过在方法上使用该注解,这些方法的参数中可以使用如下类型的参数:Exception、Request、Response、Session、WebReqeust/NativeWebRequest、Locale、InputStream、Reader、OutputStream、Writer、Model。方法的返回值类型可以使用如下类型:ModelAndView、Model、Map、View、String、HttpEntity、ResponseEntity、void。

@InitBinder

这个注解在String2.5中新增加,只能使用在方法上。作用是:初始化方法中的WebDataBinder参数,WebDataBinder的作用是完成表单字段到JavaBean属性的绑定。

使用该注解的方法支持所有RequestMapping支持使用的参数,除命令/表单对象以及相应的校验结果对象之外。另外,使用该注解的方法不允许有返回值,返回值类型一般都为void。

注意这个注解需要和RequestMapping配合使用。

@ModelAttribute

这个注解在String2.5中新增加,能使用在方法或参数上。作用:如果该注解作用在方法参数上(注意:这个方法一定是使用了@RequestMapping的方法哦),则会将该参数值绑定到Model对象中;如果该注解作用在方法上(注意:这个方法也一定是使用了@RequestMapping的方法哦),则会将方法返回值绑定到Model对象中,最后将Model对象返回到页面上。注意这个注解需要和Controller中的带有RequestMapping注解的方法配合使用。

注意:如果在请求过程中发生了异常,那么这些被放入Model中的数据是无法在前端页面接收的。

 

转载于:https://my.oschina.net/u/3272058/blog/3016647

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当SpringMVC的Controller出现异常(Exception)时,如何做到及时处理(跳转错误页面)... 的相关文章

  • Hadoop之MapReduce

    摘要 xff1a MapReduce是Hadoop的又一核心模块 xff0c 从MapReduce是什么 xff0c MapReduce能做什么以及MapReduce的工作机制三方面认识MapReduce 关键词 xff1a Hadoop
  • Linux常用命令

    摘要 xff1a 采用命令行模式操控Linux系统非常重要 本文总结Linux常用的命令 xff0c 包括命令的含义 xff0c 命令的用法以及命令的拓展 关键词 xff1a 命令行模式 Linux常用命令 给Linux系统下达命令 xff
  • Hadoop之HDFS文件操作

    摘要 xff1a Hadoop之HDFS文件操作常有两种方式 xff0c 命令行方式和JavaAPI方式 本文介绍如何利用这两种方式对HDFS文件进行操作 关键词 xff1a HDFS文件 命令行 Java API HDFS是一种分布式文件
  • R实战读书笔记四

    第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号 线 颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括如下 一图胜千字 xff0c 人们从视觉层更易获取和理解信息 图形工作 R具有非常强大的绘
  • R语言——数据分析的一把利剑

    R语言 xff0c 我把它称之为数据分析的一把利剑 为什么这么说呢 xff1f 先让我们看一下 xff0c 什么是数据分析 xff1f 所谓数据分析 xff0c 就是以商业目的为驱动 xff0c 所开展的获取数据 处理数据 分析数据 展示数
  • 【爱上Linux】第一课 Linux概述

    学习应该是快乐的事情 快乐的东西应该要分享开来 xff0c 人人都快乐 xff01 爱上Linux 第一课 Linux概述 在本课中 xff0c 和朋友们一起来思考这些问题 问题一 xff1a 谈Linux学习 xff1f 从四个方面来看
  • Android日志框架SLF4J Android

    Android日志框架SLF4J 步骤 xff1a xff08 1 xff09 加入所需要的的jar包slf4j android 1 6 1 RC1 jar xff08 2 xff09 用法 private static final Log
  • 链表的创建与遍历

    链表 xff0c 简而言之 xff0c 就是基于链式储存结构下的线性表 链表包括单向链表 双向链表以及循环链表 链表是一种很常用的数据结构 xff0c 其定义如下 xff1a 单向链表的定义 定义说明 xff1a 包括数据域和指针域 typ
  • Java异常机制

    Java异常 xff08 Exception xff09 又称例外 xff0c 是一种运行时错误 Java异常机制就是对于Java异常的处理方法 xff0c 使用Java异常机制能提升程序的容错性 xff0c 从而使程序更加健壮与安全 ja
  • Java序列化与反序列化

    Java序列化与反序列化是什么 xff1f 为什么需要序列化与反序列化 xff1f 如何实现Java序列化与反序列化 xff1f 本文围绕这些问题进行了探讨 1 Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程
  • Java语言中几个常用的包

    Java采用包结构来组织和管理类和接口文件 本文介绍Java语言类库中几个常用的包 xff0c 因为这几个包在软件开发与应用中经常需要用到 xff0c 其中有些包是必要的 若是离开它 xff0c 还真不能做事情了 第一个包 xff1a ja
  • Android的系统架构

    Android的系统架构采用了分层架构的思想 xff0c 如图1所示 从上层到底层共包括四层 xff0c 分别是应用程序程序层 应用框架层 系统库和Android运行时和Linux内核 图1 xff1a Android系统架构图 每层功能简
  • Java中 判断String 是否为空的几种方法(null 、== 、equals)

    一 基本知识 String str1 61 null str1引用为空 xff0c 它没有地址 xff0c 它是一个没有被实例化的对象 String str2 61 34 34 str2引用为空字符串 xff0c 它有地址 xff0c 它是
  • C_INCLUDES must be under the source or output directories:

    https blog csdn net cigogo article details 94546032 参考了上面大神的链接 xff0c 发现设置了绝对路径 xff0c 改为相对路径后 xff0c 正常 编译报错 xff1a LOCAL P
  • Failed to connect to raw.githubusercontent.com port 443

    Mac 安装 homebrew xff1a 1 usr bin ruby e 34 curl fsSL https raw githubusercontent com Homebrew install master install 34 报
  • NFS配置及使用

    什么是NFS NFS Network File System 即网络文件系统 xff0c 是FreeBSD支持的文件系统中的一种 xff0c 它允许网络中的计算机之间通过TCP IP网络共享存储 在NFS的应用中 xff0c 本地NFS的客
  • 在idea中配置maven(阿里云镜像)

    1 下载maven 要使用maven当然要去下载 xff0c 可以去官网下载 xff0c 去官网下载需要自己配置 xff0c 这里可以使用我配置好的maven xff1b 链接 xff1a https pan baidu com s 1Zn
  • MTK6582资料帖和问题帖集合

    MTK6582资料帖汇总 Driver All in One V1 0 MT6572 MT6582 AOSP 发给需要的 MT6582memorydevicelist MT6582完整版DATASHEET xff0c xff1e 50M x
  • MYSQL笔记1

    MYSQL笔记 参照 MySQL数据库原理 设计与应用 清华大学出版社 第二章 数据库基本操作 2 1数据库操作 2 1 1创建数据库 create database if not exists xxx 2 1 2查看数据库 1 查看存在的
  • JetBrains学生认证

    1 首先找到JetBrains官网 JetBrains官网链接 2 找到学生申请页面 学生申请页面链接 3 选择申请方式 xff1a 官方文件 选择方式一共有四种 xff0c 较简单的是其中两种 xff0c 分别是大学电子邮箱地址和官方文件

随机推荐