SpringMvc的自定义异常,交给SpringMvc管理

1.编写要给自定义异常类

public class MyCustomException extends Exception {
    //定义成员变量: 所有的异常类都具备
    private String message;//错误原因
    //自定义异常类必须有message带参构造
    public MyCustomException(String message) {
        this.message = message;
    }

    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

2.springmvc管理异常的核心配置类  HandlerExceptionResolver 

/**
 * 自定义全局异常处理器: 实现异常处理器的接口HandlerExceptionResolver
 *  判断是否是自定义异常
 *  如果是,取出自定义异常中错误信息,向用户展示
 *  如果不是,给用户一个统一的错误提示: "  非常抱歉,系统出现重大错误,已邮件告知系统管理员处理,请您耐心等待,稍后尝试。"
 */
public class MyCustomExceptionResolver implements HandlerExceptionResolver {

    /**
     * 拦截全局异常的
     * @param request 请求对象
     * @param response 响应对象
     * @param handler 被拦截的处理器Controller的方法
     * @param ex 出现了什么异常
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request,
                                         HttpServletResponse response,
                                         Object handler, Exception ex) {
        //判断是否是自定义异常
        //instanceof 判断当前对象的类型是否是指的类,前提判断对象与该类存在继承关系
        MyCustomException myCustomException = null;
        if (ex instanceof MyCustomException) {
            //如果是,取出自定义异常中错误信息,向用户展示
             myCustomException = (MyCustomException) ex;
        } else {
            //向日志文件中,输出异常信息,供开发人员排查解决问题
            //ex.printStackTrace();
            //如果不是,给用户一个统一的错误提示:
            myCustomException = new MyCustomException("非常抱歉,系统出现重大错误,已邮件告知系统管理员处理,请您耐心等待,稍后尝试");
        }
        String message = myCustomException.getMessage();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message", message);//错误原因
        modelAndView.setViewName("error");//错误页面视图

        return modelAndView;
    }
}

然后将此类注入到spring中

<bean id="myCustomExceptionResolver" class="com.spring.myerror.MyCustomExceptionResolver"></bean>

这个时候抛出的异常就会被SpringMvc管理,自定义抛出页面。

原文地址:https://www.cnblogs.com/xiaozhang666/p/13669266.html