springMVC自定义异常处理器

目录

🌱使用原因

🌳优点

🌱实现

🌳自定义一个异常

🌳异常处理

🌳测试


使用原因

系统中会有各种各样的,意料之中和意料之外的结果,我们并不能做到完全针对每个异常时刻做出针对性的处理。这时就可以使用异常处理器。

优点

实现

自定义一个异常

java 复制代码
public class MyException extends Exception{
    private String msg;

    @Override
    public String getMessage() {
        return msg;
    }

    public MyException(String message) {
        this.msg = message;
    }
    
}

msg就是异常的一个内容提示。

重写一个getMessage()方法和构造方法

异常处理

html 复制代码
 <!--xml配置自定义的常处理器-->
   <bean class="com.soft.component.ExceptionHandler"></bean>
java 复制代码
package com.soft.component;

import com.soft.exc.MyException;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ExceptionHandler implements HandlerExceptionResolver {
    public ModelAndView resolveException(HttpServletRequest httpServletRequest,
                                         HttpServletResponse httpServletResponse,
                                         Object o, Exception e) {
       //只要当前系统出现任何异常(自定义的,非自定义的)都会被传入当前的异常处理器的Exception
        //所以就可以当系统出现错误,都会通过一个错误页面进行处理
        MyException myException = null;
        if(e instanceof MyException){
            //如果当前进来的异常就是我们自定义的MyException异常,就直接打印我们自定义的异常中的内容
            myException = (MyException)e;
        }else {
            //如果是其他异常进来,比如数学异常,空指针异常,越界异常等等。。
            // 就重新new一个自定义异常
            myException = new MyException("其他异常跳转,正在加紧修复中。。。");
        }
        //将异常信息通过ModeAndView传给前端页面
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg",myException.getMessage());
        mv.setViewName("500");
        return mv;
    }
}

500页面:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>抱歉,出错啦。。</title>
</head>
<body>
  <h1>非常抱歉</h1>
<hr>
<!--  通过thymeleaf动态获取异常中的msg内容-->
<span th:text="${msg}">动态内容</span>
</body>
</html>

测试

------->

相关推荐
Zzxy几秒前
MyBatis-Plus入门
java·mybatis
木井巳1 分钟前
【递归算法】找出所有子集的异或总和再求和
java·算法·leetcode·决策树·深度优先
悟空码字4 分钟前
【保姆级】实现APP分享至微信,看完就能落地
java·后端·微信
froginwe114 分钟前
SVN 创建版本库
开发语言
2501_924952696 分钟前
C++中的枚举类高级用法
开发语言·c++·算法
常利兵6 分钟前
Android 开发探秘:View.post()为何能获取View宽高
java·数据库·sql
闭关苦炼内功6 分钟前
使用Java语言实现二分查找
java·开发语言
毕设源码-郭学长8 分钟前
【开题答辩全过程】以 基于Spring Boot“活力青春”健身房管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
2401_873204658 分钟前
代码覆盖率工具实战
开发语言·c++·算法
m0_4750645010 分钟前
Spring AI RAG简易demo
java·人工智能·spring