SpringMVC——异常

1. 异常处理思路

Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进行异常的处理。

2. SpringMVC的异常处理

controller代码

java 复制代码
@Controller
@RequestMapping("/role")
public class RoleController {
    /**
     * 自己处理异常
     * @return
​
    @RequestMapping("/findAll.do")
    public String findAll(){
​
        try {
            System.out.println("执行了...");
            // 模拟异常
            int a = 10/0;
        } catch (Exception e) {
            e.printStackTrace();
            // 跳转到友好提示页面
        }
​
        return "suc";
    }
     */
​
    /**
     * 使用异常处理器方式
     * @return
     */
    @RequestMapping("/findAll.do")
    public String findAll(){
        System.out.println("执行了...");
        // 模拟异常
        int a = 10/0;
        return "suc";
    }
}

自定义异常类

java 复制代码
public class SysException extends Exception{
    // 提示消息
    private String message;
​
    @Override
    public String getMessage() {
        return message;
    }
​
    public void setMessage(String message) {
        this.message = message;
    }
​
    public SysException(String message) {
        this.message = message;
    }
}

自定义异常处理器

java 复制代码
public class SysExceptionResolver implements HandlerExceptionResolver {
    /**
     * 程序出现了异常,调用异常处理器中的方法
     * @param o
     * @param e
     * @return
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) {
        // 在控制台打印异常的信息
        e.printStackTrace();
        // 做强转
        SysException exception = null;
        // 判断
        if(e instanceof SysException){
            exception = (SysException)e;
        }else{
            exception = new SysException("系统正在维护,请联系管理员");
        }
​
        // 存入异常提示信息
        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMsg",e.getMessage());
        // 设置跳转的页面
        mv.setViewName("error");
        return mv;
    }
}

配置异常处理器

XML 复制代码
 
<bean id="sysExceptionResolver" class="com.qcbyjy.demo3.SysExceptionResolver" />

jsp代码

html 复制代码
 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>错误提示页面</title>
</head>
<body>
​
    <!-- 异常测试 -->
    <h3>异常测试(会跳到 error.jsp)</h3>

    <a href="${pageContext.request.contextPath}/role/findAll.do">模拟除 0 异常</a>
​
​
</body>
</html>
相关推荐
Bs_MoneyMagnet9 小时前
基于springboot+vue的滑雪场票务与装备租赁系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
AlienZHOU14 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
野生技术架构师15 小时前
2026 Java 面试全套总结,八股 + 场景 + AI 相关面试考点
java·人工智能·面试
香吧香15 小时前
java服务异常日志只打印异常类型,没有堆栈定位分析
java·jvm·异常
qq_25183645716 小时前
AI 疾病自查功能SpringbootAI项目实战 · 技术实现文档
java·ai·ai编程
逆境不可逃16 小时前
Pi Agent 学习笔记:对话太长以后,如何压缩上下文
java
MetaLite16 小时前
JDK 8~26 核心特性一览:从 Stream 到 Scoped Values
java
wno70417 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
Captaincc17 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
君顾117 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房