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>

测试

------->

相关推荐
小兔崽子去哪了2 小时前
Java 自动化部署
java·后端
ma_king2 小时前
入门 java 和 数据库
java·数据库·后端
后端AI实验室2 小时前
我用Cursor开发了3个月,整理出这套提效4倍的工作流
java·ai
码路飞7 小时前
GPT-5.3 Instant 终于学会好好说话了,顺手对比了下同天发布的 Gemini 3.1 Flash-Lite
java·javascript
SimonKing7 小时前
OpenCode AI编程助手如何添加Skills,优化项目!
java·后端·程序员
Seven979 小时前
剑指offer-80、⼆叉树中和为某⼀值的路径(二)
java
怒放吧德德20 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆1 天前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
心之语歌1 天前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊1 天前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端