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>
相关推荐
Tisfy13 分钟前
LeetCode 1927.求和游戏:抵消+看最值
java·leetcode·游戏·题解·博弈论
钛态5 小时前
Vite 中的 CSS 工程化:从 CSS Modules 到 UnoCSS 的渐进式迁移
前端·vue·react·web
秋饼7 小时前
JDK 27 企业级 AI 服务落地实战:G1 默认、紧凑对象头、后量子 TLS 与 JFR 脱敏全解析
java·ai·技术分享·后端开发
Csvn7 小时前
原型链、this 与闭包内存:三座深水区一次打通(含内存泄漏排查实战)
前端·javascript
卓怡学长7 小时前
w176基于SpringBoot的医院管理系统
java·spring boot·spring·maven·intellij-idea
lemon_sjdk7 小时前
ObjectProperty
java·开发语言·算法
葡萄城技术团队7 小时前
如何通过 JSON 数据源 / Web API 快速构建轻量级报表(Report)?
前端·json·原型模式
hh9507 小时前
Agent Plan x DeepSeek Harness:Agent 供应链安全与第三方插件审计
java·开发语言·安全·agent plan·adg成都社区·adg社区
吴声子夜歌7 小时前
Java面试——HBase原理及应用
java·面试·hbase