SpringMVC 异常处理

29 篇文章 1 订阅

异常分类

  程序中异常分为两类为:预期异常(对象为空)和运行时异常RunTimeException(如除数为0),前者通过捕获异常从而获取异常信息;后者只能通过规范代码开发、测试等手动减少运行时异常

SSM项目中异常处理的过程

  系统的Dao,service,controler出现异常都是通过throws Exception向上抛,最后由springMVC前端控制器交由异常处理器进行异常的处理

springMVC提供的处理方法

  可以自定义异常类,继承Exception类;springmvc提供了全局异常处理器,一个系统只有一个全局异常处理器进行统一的异常处理,实现HandlerExceptionResolver接口的类就是全局异常处理器

//自定义异常类,继承Exception
public class CustomException extends Exception {

    //异常信息
    public String message;
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public CustomException(String message){
        super(message);
        this.message=message;
    }
}

全局异常处理器处理异常的思路

  系统遇到异常时,在程序中手动抛出,dao抛给service,service抛给controller,controller抛给前端控制器,前端控制器调用全局异常处理器处理异常,全局异常处理器处理异常思路(解析异常类型):

  • 如果该异常类型是系统自定义异常,直接取出异常信息,在错误页面展示
  • 如果该异常类型不是系统自定义异常(则视为运行时异常),构造一个自定义的异常类型(”未知错误”)
//全局异常处理器
public class CustomExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
            Exception ex) {
        CustomException customException = null;
        if(ex instanceof CustomException){
            //是自定义异常
            customException=(CustomException)ex;
        } else {
            //不是自定义异常
            customException=new CustomException("未知错误");
        }

        //取出错误信息
        String message = customException.getMessage();
        ModelAndView modelAndView = new ModelAndView();
        //将取出的错误信息返回到页面
        //返回的页面
        modelAndView.setViewName("items/error");
        return modelAndView;
    }
}

何时在表现层处理,何时在service层处理

  • 如果和业务功能相关的异常,就在service层抛出
  • 如果和业务功能无关的异常(输入字符的判断),就在controler中抛出

全局异常处理器的配置

  只需将全局异常处理器配置到spring中即可

<!-- springMVC.xml -->
    <!-- 全局异常处理器 -->
    <bean class="cn.itcast.ssm.exception.CustomExceptionResolver"></bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值