SpringMVC异常处理

一、异常处理思路

        系统中异常包括两类:自定义异常和运行时异常RUN提么E猜测铍铜,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

        系统的dao、service、controller出现都通过throws new Exception()向上抛出,最后

springmvc前端 控制器交由异常处理器进行异常处理。

        SpringMVC提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。

二、自定义异常

 自定义异常需要继承 Exception 

/**
 * 系统自定义异常类,针对自定义的异常,需要再程序中抛出此类的异常
 *
 * @author ding
 * @since 2024/6/18
 */
public class CustomException extends Exception{

    public CustomException() {
        super();
    }

    //message:异常信息
    public CustomException(String message) {
        super(message);
    }
}

三、全局异常处理器

1.需要准备自定义异常

2.实现实现HandlerExceptionResolver接口,重写其中的resolveException()方法

3.在SpringMVC配置类中重写extendHandlerExceptionResolvers()

定制全局异常处理器

//全局异常处理器
@Override
public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
    resolvers.add(new MyHandlerExceptionResolver());
}

4.新建error.html错误页面,将来显示异常信息

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>错误页面</title>
</head>
<body>
  <h3 style="color: lightcoral">[[${errors}]]</h3>
</body>
</html>

5.业务逻辑执行时,满足条件则抛出自定义异常

        系统遇到异常,在程序中手动抛出(throw new CustomException ("message")),dao抛给service,service抛给controller,controller抛给前端控制器,前端控制器抛给全局异常处理器。

        全局异常处理器处理异常时,首先解析该异常是否为自定义异常,若不是,则抛出 “未知错误”。如果类型为自定义异常,则将自定义异常的具体异常信息去除,并通过 MovelAndView 将信息传递给错误信息页面。

        

@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    System.out.println("handler = "+handler);
    System.out.println("ex = "+ex);

    CustomException customException = null;
    if(ex instanceof CustomException){
        customException = (CustomException)ex;
    }else{
        customException = new CustomException("未知错误");
    }

    ModelAndView mv = new ModelAndView();
    mv.addObject("errors" , customException.getMessage());
    mv.setViewName("error");
    return mv;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值