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>
相关推荐
我不是外星人8 分钟前
一键还原任意网站,这套 Playwright + 多 Agent 工程流太猛了
前端·后端·ai编程
济*沧*海12 分钟前
Set集合深度解析:原理、特性与应用场景全攻略
java
用户0595401744613 分钟前
AI 客服突然“失忆”,排查 6 小时发现 LangChain 记忆存储的 3 个致命坑
前端·css
geovindu13 分钟前
java: Singleton Pattern
java·开发语言·后端·单例模式·设计模式·创建型模式
IT_陈寒34 分钟前
Vue的v-if和v-show,我竟然用错了这么久
前端·人工智能·后端
一路向北North36 分钟前
Spring Security OAuth2.0(16):密码模式
java·后端·spring
水无痕simon36 分钟前
5 多表操作
java·开发语言·数据库
云絮.37 分钟前
计算机相关工作原理
服务器·前端·数据库
随风一样自由39 分钟前
【前端+React+缓存竞态】导航切换缓存刷新机制
前端·react.js·缓存
恋猫de小郭1 小时前
Flutter 开发怎么做 Agent ?从工程实战详细给你解读下
android·前端·flutter