SpringMVC自定义异常处理

本文介绍了如何在SpringMVC中实现自定义异常处理。首先定义了一个名为`NameException`的异常类,然后创建了一个`StudentException`处理器类,使用`@ControllerAdvice`和`@ExceptionHandler`注解捕获并处理`NameException`。当在控制器方法中抛出`NameException`时,处理器将重定向到特定的异常页面。在配置文件中扫描处理器类,并在页面上展示异常信息。通过这种方式,实现了异常处理的集中化和标准化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringMVC自定义异常跳转类

思路解析

框架使用的是集中的异常处理。 把各个Controller中抛出的异常集中到一个地方处理。 处理异常的叫做异常处理器。

框架中使用两个注解完成异常的集中处理。 这样每个controller不用单独处理异常了。注解是:

1)@ExceptionHandler : 放在方法的上面,表示此方法可以处理某个类型的异常。 当异常发生时,执行这个方法。

  1. @ControllerAdvice: 放在类的上面, 表示这个类中有异常的处理方法。 相当于aop中的@Aspect.

​ @ControllerAdvice看做是 控制器增强, 就是给Controller类增加异常(切面)的处理功能.

带有@ControllerAdvice注解就表示这是一个异常处理器,处理器接收指定异常,执行操作方法。

实现步骤

首先要自定义一个异常类

public class NameException extends Exception{
    public NameException() {
        super();
    }

    public NameException(String message) {
        super(message);
    }
}

然后在创建一个异常处理器,用于捕获异常然后处理

/*
* @ControllerAdvice
* 标明这是一个异常处理器
* 抛出的异常会在这个类中寻找有没有相对应的处理方法
* */
@ControllerAdvice
public class StudentException {
/*
    * 指定捕获异常
    * @ExceptionHandler
    * value的值是要捕获的异常类
    * 只要是抛出的这个异常就会执行这个处理方法
    * */
    //这里的操作方法跟控制类的方法一样,返回数据到页面的操作也一样
    @ExceptionHandler(value = NameException.class)
    public ModelAndView  hj(Exception e){
        ModelAndView MV = new ModelAndView();

        MV.addObject("exception","名字错误");
        MV.setViewName("/Exception");

        return MV;

    }

}

异常处理器要交给容器管理,所有要在SpringMVC的配置文件中加载

<!--    扫描ExceptionController包下的处理类-->
<context:component-scan base-package="ling.ExceptionController"/>

异常跳转页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
警告:<br/>
错误:${exception}
</body>
</html>

最后一步就是在访问控制方法中使用这个异常处理就行

@Controller
public class StudentExceptionA {

@RequestMapping("/ling")
    public String inthh(Student user) throws NameException {

        if (user.getName() == null || user.getName() == ""){
            throw new NameException();
        }

        return user.toString();
    }
    

流程

@Controller —》 @RequestMapping("/ling") —》 throw new NameException() —》@ControllerAdvice —》 @ExceptionHandler(value = NameException.class) --》return MV;

如果前端传来的参数中name为空,就会抛出name异常,异常处理类就会捕获并执行处理方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值