SpringMVC实现统一异常处理

1.项目开发中处理异常的思路:

  • dao异常通常抛给Service
  • Service异常通常抛给Controller
  • Controller把异常抛给前端控制器(SpringMVC框架)
  • 由前端控制器把异常交给异常处理器进行处理
    在这里插入图片描述

2.自定义异常处理器

方式1:springmvc的xml方式

  • 编写一个异常类,实现处理异常解析器接口HandlerExceptionResolver
  • 实现处理异常的方法
  • 在springmvc.xml中将异常解析器对象交给springmvc容器管理

方式2:springmvc的注解方式(推荐)

  • 编写一个异常类,添加注解@ControllerAdvice
  • 编写一个处理异常的方法,在方法上添加注解@ExceptionHandler,通过value属性声明处理那种异常

方式3:web.xml中配置(404和500)

3.代码实现

3.1 springmvc的xml方式实现

1)编写一个异常类,实现处理异常解析器接口HandlerExceptionResolver
2)实现处理异常的方法

public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("error");  //error是异常页面
        if (ex instanceof NullPointerException) {
            //如果是空指针异常,可以做针对性处理。通常不需要
            modelAndView.addObject("msg", "空指针异常");
        }else if(ex instanceof ClassCastException){
            //如果是类型转换异常,可以做针对性处理。通常不需要
            modelAndView.addObject("msg", "类型转换异常");
        }
        return modelAndView;
    }
}

3)在springmvc.xml中将异常解析器对象交给springmvc容器管理

<bean class="com.itheima.resolver.MyExceptionResolver"/>

3.2 springmvc的注解方式实现(推荐)

1)编写一个异常类,添加注解@ControllerAdvice
2)编写一个处理异常的方法,在方法上添加注解@ExceptionHandler,通过value属性声明处理哪种异常

@ControllerAdvice   //异常处理类
public class MyExceptionHandler {
    @ExceptionHandler(value = Exception.class)    //处理所有的异常
    public ModelAndView handlerException(Exception ex){
        ModelAndView mv = new ModelAndView();

        mv.setViewName("error");
        return mv;
    }
}

3.3 web.xml中配置(404和500)实现

<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/pages/404.jsp</location>
</error-page>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值