基于springframework中HandlerExceptionResolver接口的统一异常处理

系统中异常类型有哪些?
包括预期可能发生的异常、运行时异常(RuntimeException),运行时异常不是预期会发生的。
针对预期可能发生的异常,在代码手动处理异常可以try/catch捕获,可以向上抛出。
针对运行时异常,只能通过规范代码质量、在系统测试时详细测试等排除运行时异常。

1.定义异常类继承Exception
//登录异常(账号不存在 密码错误..)
public class LoginException extends Exception{
    private String errorMessage;

    public LoginException(String message) {
        super(message);
        this.errorMessage=message;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }
}
2.异常处理(统一异常处理器实现HandlerExceptionResolver接口)

前端控制器DispatcherServlet在进行HandlerMapping、调用HandlerAdapter执行Handler过程中,如果遇到异常,进行异常处理。

public class ExceptionResolver implements HandlerExceptionResolver{
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        //打印异常信息
       e.printStackTrace();
        //所有异常类声明
       LoginException loginException;
       DefaultException defaultException;
       //
       String errorMessage;
       if(e instanceof LoginException){
           loginException=(LoginException)e;
           errorMessage=loginException.getErrorMessage();

       }
       else {
            defaultException = new DefaultException("未知错误");
           errorMessage=defaultException.getErrorMessage();
       }
        httpServletRequest.setAttribute("errorMessage",errorMessage);
        try {
            //转发到错误页面
            httpServletRequest.getRequestDispatcher("error.jsp").forward(httpServletRequest,httpServletResponse);
        } catch (ServletException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }

        return new ModelAndView();
    }
}
3.在SpringMVC配置文件中配置异常处理bean
<bean class="com.ning.exception.ExceptionResolver"/>
4.在可能发生异常的位置抛出自定义异常
throw new LoginException("登陆失败");

根据不同的异常类型进行异常处理。
系统自定义异常类,在controller方法中、service方法中手动抛出此类异常。
针对系统自定义的异常,就可以直接从异常类中获取异常信息,将异常处理在错误页面展示。
针对非自定义异常,对这类重新构造成一个自定义异常,异常信息为“未知错误”,此类错误需要在系统测试阶段去排除。
在统一异常处理器中实现上边的逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值